我正在使用jQuery 1.7.2和jQueryUI 1.8.12尝试实现一个自动完成字段,具有以下行为:
- 如果选择了自动完成建议(使用鼠标或键盘),则调用函数A
- 如果没有匹配项(因此未选择建议)并按下回车,则调用函数B
我遇到的问题是,当我使用键盘选择建议时,我的回车检查也会触发,这会在不应该调用函数B时使我调用函数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来指示已触发选择事件?我想避免这种情况,因为这样的标志必须在其他地方清除,这似乎容易出错。
ui-state-hover
(正如D. Strout建议的那样)相结合,它应该可以工作。我现在会进行测试。 - bfavaretto