bfa*_*tto 5 jquery jquery-ui-autocomplete
我正在尝试使用jQuery 1.7.2和jQueryUI 1.8.12来实现具有以下行为的自动填充字段:
我遇到的问题是,当我用键盘选择建议时,我的检查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)');
});
Run Code Online (Sandbox Code Playgroud)
根据控制台,在自动完成选择事件(这很奇怪)之后,会触发keyup / keydown处理程序,因此,我试图阻止它(通过尝试冒泡,阻止默认值或同时阻止两者)。我还遍历了事件对象的originalEvent属性,直到最顶层的父对象(原始的KeyboardEvent)为止,但这似乎也无法阻止。
有谁知道我要完成的目标的简单解决方案,最好避免使用标志来表明select事件已被触发?我想避免这种情况,因为这样的标志必须在其他地方清除,这似乎容易出错。
这个怎么样。在注册keydown事件之前,只需绑定一个autocomplete.keydown事件即可。这保证在你按下键盘之前执行。请注意,事件注册的顺序也很重要。
$('input')
.autocomplete({
source: ['foo', 'bar', 'baz' ],
select: function(event, ui) {
console.log('suggestion selected');
}
}).bind("keydown.autocomplete", function() {
if(event.keyCode == 13){
console.log('keydown.autocomplete (keyup)');
};
}).keydown(function(e) {
if(e.keyCode == 13){
console.log('ENTER (keydown)');
};
}).keyup(function(e) {
if(e.keyCode == 13){
console.log('ENTER (keyup)');
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |