2011-06-23 160 views

回答

6

將取消在keypress事件Ryan's example並沒有爲我工作,但我們可以把它放在select選項自動完成的:

select: function(e, ui) { 
    if(e.keyCode === 9) return false; 
    // other code... 
} 
1

製表符不是真的選擇當前項目,而是將光標移動到下一個可用製表符的項目。所以,你需要做的是自動完成禁用標籤:

Lock tab key with javascript?

像這樣的東西爲我工作,你可能需要修改它多一些。

http://jsfiddle.net/Uubn6/

基本上,你之前將它傳遞給自動完成的keydown的處理程序捕獲keydown事件。當你捕捉它時,你可以做任何你想做的事(通過或不通過)。

+0

這不聲音正確。如果是觸發選擇事件的模糊事件(通過選項卡聚焦下一個元素),那麼當我點擊*另一個元素時,它也會觸發,但這不會發生。另外,在你的小提琴中,你阻止我跳到下一個元素,這與我想要的完全相反。我希望能夠在沒有*觸發選擇的情況下選項卡到下一個輸入*。 – mpen

+0

雖然你的例子*阻止了自動完成... – mpen

4

在jquery-ui中使用.autocomplete()修飾符時,它會將輸入文本框的按鍵處理程序設置爲如下所示。該self.menu.select文本框設置爲當前突出顯示的值在自動完成列表

.bind("keydown.autocomplete", function(event) { 
... 
switch(event.keyCode) { 
... 
case keyCode.TAB: 
    if (!self.menu.active) { 
     return; 
    } 
    self.menu.select(event); 
    break; 
... 
    } 
} 

所以,你需要做的是保證這個處理程序不會被調用的。如果按鍵是TAB,我可以通過向按鍵添加處理程序來完成此操作。

$("#tags").autocomplete({ 
     source: availableTags 
    }); 
$("#tags").keypress(function(e){ 
    if(e.keyCode == keyCode.TAB) { 
     e.stopImmediatePropagation(); 
    } 
}); 

You can see the result here.

+0

忘了在jsfiddle中包含jquery ui。我做了,它不適合我。 – zsalzbank

+0

我剛更新了鏈接。它現在應該指向一個包含jquery-ui庫的jsfissle。 –

+0

它在我們添加庫(http://jsfiddle.net/mnbayazit/TmZVw/3/)時工作,但窗口保持打開狀態(壞!)。另外,你的小提琴與你在答案中寫的內容完全不一致(你沒有模糊)。 – mpen