7

这个问题的目标是:通过使用 jquery-autocomplete,如果没有选择任何项目,则使tabkey 能够选择第一个项目。

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

我的疑问是:

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

有什么建议/意见吗?

PS:

  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);
});
4

1 回答 1

3

我认为你需要这样的东西:

$("#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;
    }

    // ...
});
于 2012-08-23T11:14:50.840 回答