【发布时间】:2013-04-19 19:50:06
【问题描述】:
使用 jQuery 1.7.2 和 jQueryUI 1.8.12,我正在尝试实现具有以下行为的自动完成字段:
- 如果选择了自动完成建议(使用鼠标或键盘),请调用函数 A
- 如果没有匹配项(因此没有选择建议)并且按下了 ENTER,则调用函数 B
我遇到的问题是,当我用键盘选择一个建议时,我对 ENTER 的检查也会被触发,这会让我在不应该调用函数 B 时调用它。这是一个简单的例子(也在jsfiddle):
$('input').autocomplete({
source: ['foo', 'bar', 'baz' ],
select: function(event, ui) {
console.log('suggestion selected');
}
}).keydown(function(e) {
if(e.keyCode == 13) console.log('ENTER (keydown)');
}).keyup(function(e) {
if(e.keyCode == 13) console.log('ENTER (keyup)');
});
根据控制台,keyup/keydown 处理程序在自动完成选择事件之后触发(这很奇怪),所以我试图阻止它(通过尝试顶部冒泡,阻止默认, 或两者)。我还将事件对象的 originalEvent 属性遍历到最顶层的父级(原始的 KeyboardEvent),但这似乎也无法阻止。
有没有人知道我想要完成的简单解决方案,最好避免使用flags 来指示选择事件已被触发?我想避免这种情况,因为这样的标志必须在其他地方清除,这似乎很容易出错。
【问题讨论】:
标签: jquery jquery-ui-autocomplete