【问题标题】:Jquery-autocomplete: makes the tab key select the first item if no item is selectedJquery-autocomplete:如果未选择任何项目,则使 tab 键选择第一个项目
【发布时间】:2012-08-22 12:07:15
【问题描述】:

本题的目标是:通过使用jquery-autocomplete,使得tab键能够在没有选择项目的情况下选择第一个项目。

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

我的疑惑是:

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

有什么建议/意见吗?

附:

  1. 这里是 jsfiddle 链接:http://jsfiddle.net/uymYJ/31/
  2. 这个问题和这个How to avoid to modify the event object in this situation有关。

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

【问题讨论】:

  • 请问$.Event 是什么?我在 jQuery API 中一无所获,但 console.log($.Event) 输出 function。能否提供文档链接?
  • @caligula,感谢您的评论。这是链接api.jquery.com/category/events/event-object。在我的代码中:jQuery.Event 等于 $.Event
  • 澄清一下 - 你希望tab键选择第一个项目,这意味着你想禁用向上+向下箭头?
  • @Chazbot 我想保持相同的行为并添加以下内容:tab key select the first item if no item is selected
  • jQuery autocomplete manual input 的可能重复项(尽管没有答案)

标签: javascript jquery jquery-ui jquery-events jquery-ui-autocomplete


【解决方案1】:

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

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

    // ...
});

【讨论】:

  • +1 感谢您的回答。你能解释一下你选择的原因吗?谢谢。
  • 我认为您需要进行一些自定义 TAB 按下行为。因为默认的不适合你的任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2021-11-13
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
相关资源
最近更新 更多