Jquery自动完成:如果没有选择任何项目,则使tab键选择第一个项目

Jquery-autocomplete: makes the tab key select the first item if no item is selected

本文关键字:项目 则使 tab 第一个 选择 任何 有选择 如果 Jquery      更新时间:2023-09-26

这个问题的目标是:通过使用jquery自动完成,使选项卡键能够在没有选择项目的情况下选择第一个项目

我实现的代码(1)有效,但我有一些疑问,我想澄清它们,或者,如果可能的话,改进/更改代码(1,以实现我的目标)。

我的疑虑是:

我触发ENTER太早了:事件调度是异步的(不同的侦听器是同步调用的,但它与触发器是异步的),所以我可能会在侦听器处理DONE之前触发它)
因此,我在这里仍然为两个事件使用相同的对象,因此我可能会有令人讨厌的副作用(例如,如果我在第一次调度期间阻止默认,那么第二次调度也会阻止,因为它是相同的对象)。

有什么建议/意见吗?

p.S.:

  1. 以下是jsfiddle链接:http://jsfiddle.net/uymYJ/31/.
  2. 这个问题与这个问题有关如何避免在这种情况下修改事件对象

(1)

$("#box").keydown(function(event){
    var newEvent = $.Event('keydown', {
        keyCode: event.keyCode
    });
    if (newEvent.keyCode !== $.ui.keyCode.TAB) {
        return;
    }
    newEvent.keyCode = $.ui.keyCode.DOWN;
    $(this).trigger(newEvent);
    newEvent.keyCode = $.ui.keyCode.ENTER;
    $(this).trigger(newEvent);
});

我想你需要这样的东西:

$("#box").keydown(function(event){
    var newEvent = $.Event('keydown', {
        keyCode: event.keyCode
    });
    if (newEvent.keyCode !== $.ui.keyCode.TAB) {
        return;
    }
    if (newEvent.keyCode == $.ui.keyCode.TAB) {
        // custom logic for tab
        newEvent.keyCode = $.ui.keyCode.DOWN;
        $(this).trigger(newEvent);
        return false;
    }
    // ...
});