2011-09-05 27 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

相關問題