我正在使用 jquery ui 自动完成功能,并且想要破译由键盘交互和鼠标交互触发的焦点事件。我该怎么办?
$('input').autocomplete({
source: function(request, response) {
...
},
focus: function(event, ui) {
// If focus triggered by keyboard interaction
alert('do something');
// If focus event triggered by mouse interaction
alert('do something else');
}
});
谢谢
最佳答案
我能想到的唯一方法是让处理程序监听 keypress
和click
事件,并打开/关闭 bool 标志。然后就focus
输入的处理程序,您只需检查标志的值是什么,然后从那里开始。
大概是这样的
var isClick;
$(document).bind('click', function() { isClick = true; })
.bind('keypress', function() { isClick = false; })
;
var focusHandler = function () {
if (isClick) {
// clicky!
} else {
// tabby!
}
}
$('input').focus(function() {
// we set a small timeout to let the click / keypress event to trigger
// and update our boolean
setTimeout(focusHandler,100);
});
在 jsFiddle 上制作了一个小型工作原型(prototype)(您不喜欢这个网站吗?)。 Check it out if you want.
当然,这都是在 focus
上运行的。 <input>
上的事件,但是focus
自动完成处理程序的工作方式相同。
setTimeout
会引入一点延迟,但在 100 毫秒时,根据您的需要,它可能可以忽略不计。
关于javascript - 区分键盘/鼠标触发的焦点事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5653332/