2011-09-05 79 views
2

jQueryUI自动完成添加到输入文本元素使用下面的代码在窗体中。 如果输入文本并快速按下Tab键,则光标移动到其他列,但自动完成菜单保持打开状态。如何防止在快速输入时打开jqueryUI自动完成下降

如何防止在这种情况下打开自动完成菜单。 可能模糊事件应该终止自动完成drowpdowm菜单数据检索调用,以便 下拉菜单没有从服务器或类似的东西收到数据后打开? 我试图添加input.autocomplete('关闭')模糊,但这没有帮助。 在从服务器检索数据之前和自动完成打开之前,可能发生模糊。

输入包含input type ='text'对象引用。

input.autocomplete({ 
     source: 'GetLookupList', 
     position: { collision: 'flip flip' } 
    } 
    ); 

$(input).bind({ 
     keydown: function (e) { 
      if (enter(e) || (e.ctrlKey && e.keyCode === 83)) { 
       input.autocomplete('close'); 
      } 
     }, 
     blur: function (e) { 
      input.autocomplete('close'); 
     } 
    }); 
+0

你有没有想过这个?我有类似的问题,如果我输入的速度非常快,并在自动完成之前按回车,当部分回传完成时,它会在页面的左上角显示下拉菜单。 –

+0

我没有解决这个问题。 jquery ui自动完成错误跟踪器包含类似的问题和修复。您可以尝试应用此修复程序,使用svn中的jqueryui或等待下一个版本(也许2012年1月)。如果您有关于此的新信息,请告诉我们。 – Andrus

回答

1

我打算在评论部分写回应,但我想附上一些代码。

我基本上做同样的事情,你和束缚一个​​为enter键关闭autocomplete然后调用上附加到搜索框中的按钮click事件。

$('input[id$=MainSearchBox]').bind(
    { 
     keydown: function(e) 
     { 
      if (e.which === 13) 
      { 
       $('input[id$=MainSearchBox]').autocomplete('close'); 
       $('input[id$=MainSearchBox]').autocomplete('disable'); 
       $('input[id$=MainSearchBoxGoButton]').click(); 
       e.preventDefault() 
       return false; 
      } 
     } 
    }); 

似乎是人们可以做的最直接的事情。我在下一个版本中看到了一些关于修复的地方,但现在,我认为这个解决方案会起作用。

编辑:更新了代码以禁用自动完成,允许点击通过,当它包含在其中的pageLoad方法在部分回传中被调用时,它将重建自动完成对象。我担心这可能不是最聪明或最有效的方法,但它似乎工作...

+0

我在我的应用程序上有类似的代码。如果用户在其他单元格中快速点击,则阴影仍然保持打开状态。如果服务器ajax调用完成,模糊不能取消,模糊后可能会打开下拉菜单。 – Andrus

+0

我更新了我的代码......快速查看。 –

+0

谢谢。这种方法假定表单已提交。如果快速按下Tab键移动到下一个字段或在其他字段中单击,如何禁用此下拉菜单以显示此情况?也许有可能检查当前的自动完成是否在ajax调用竞争事件中集中焦点,或者在模糊事件中设置属性以取消焦点。你有没有尝试从git hub jquery ui autocomplate? – Andrus