jQuery UI 自动完成:禁用选项卡完成?

发布于 2024-11-16 15:24:17 字数 134 浏览 3 评论 0原文

参考

如何禁用使用 Tab 键来选择当前/突出显示的项目?我只想 Enter 来填充它。

reference

How can I disable the use of the Tab key to select the current/highlighted item? I only want Enter to fill it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吾家有女初长成 2024-11-23 15:24:17

Ryan 将取消操作放入 按键中的示例 事件对我不起作用,但我们可以将其放在自动完成的 select 选项中:

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

Ryan's example of putting the cancellation in the keypress event didn't work for me, but we can put it in the select option of autocomplete:

select: function(e, ui) {
    if(e.keyCode === 9) return false;
    // other code...
}
梦里泪两行 2024-11-23 15:24:17

当您在 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,则该处理程序会从处理程序返回 false。

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

您可以在此处查看结果。

When you use the .autocomplete() modifier in jquery-ui, it sets the keypress handler for your input textbox to as follows. The self.menu.select sets the text box to the currently highlighted value in the auto-complete list

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

So what you need to do is ensure that this handler does not get called. I was able to do this by adding a handler to the keypress that returns false from the handler if the keypress is TAB.

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

You can see the result here.

茶花眉 2024-11-23 15:24:17

Tab 并不是真正选择当前项目,而是将光标移动到下一个可选项卡项目。因此,您需要做的是禁用自动完成选项卡:

使用 javascript 锁定选项卡键?

这样的东西对我有用,你可能需要进一步修改它。

http://jsfiddle.net/Uubn6/

基本上,您在将 keydown 事件传递给自动完成按键处理程序。当你捕获它时,你可以做任何你想做的事(通过或不通过)。

Tab isn't really selecting the current item, it is moving the cursor to the next tab-able item. So what you need to do is disable tab for the autocomplete:

Lock tab key with javascript?

Something like this is working for me, you may need to modify it some more.

http://jsfiddle.net/Uubn6/

Basically, you capture the keydown event prior to passing it to the autocomplete keydown handler. When you capture it, you can do whatever you want (pass it or not).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文