2011-06-23 117 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