event.OriginaleEvent在焦点事件中未定义,使用jQuery自动完成
我需要用自定义操作覆盖自动完成焦点事件,并根据用户是否使用键盘而不是鼠标从列表中进行选择来执行操作。为此,我正在检查event对象中的originalEvent.type,它应该包含执行的操作类型(keydown、keyup、mouseenter等) 然而,原始事件对象似乎没有定义,我不明白为什么。它在autocomplete代码中的实际焦点事件中工作正常,但在autocomplete对象中重写该事件时则不行 请看下面我的代码。我非常感谢你在这件事上的任何帮助,因为这让我发疯了event.OriginaleEvent在焦点事件中未定义,使用jQuery自动完成,jquery,jquery-ui,jquery-plugins,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Plugins,Jquery Ui Autocomplete,我需要用自定义操作覆盖自动完成焦点事件,并根据用户是否使用键盘而不是鼠标从列表中进行选择来执行操作。为此,我正在检查event对象中的originalEvent.type,它应该包含执行的操作类型(keydown、keyup、mouseenter等) 然而,原始事件对象似乎没有定义,我不明白为什么。它在autocomplete代码中的实际焦点事件中工作正常,但在autocomplete对象中重写该事件时则不行 请看下面我的代码。我非常感谢你在这件事上的任何帮助,因为这让我发疯了 $( "#tag
$( "#tags" ).autocomplete({
source: availableTags,
focus: function(event, ui) {
//Check whether focus was triggered by a mouse or keyboard event
if ( /^key/.test(event.originalEvent.type) ) {
//Do something here
}
return false;
}
});
实际上,我能够访问
originalEvent
,但我认为即使您能够检索到它,它也帮不了您;查看以下示例中的控制台:
您会注意到,originalEvent
的类型是menufocus
,我认为这不是您所期望的
完成您试图执行的操作的一种可能方法是检查event.which
,并查看它是向上箭头还是向下箭头(假设这些是您可以在autocomplete小部件中使用的唯一键):
这里有一个例子:安德鲁,谢谢你的建议
我忘了提到我使用的是jQueryUI1.8.5,所以检查“which”属性对我也不起作用,因为它也是未定义的。升级到1.8.10有助于tho,它开始工作。很明显,这整件事是1.8.5中的一个bug,后来被修复了
因此,如果其他人遇到类似问题-升级到最新版本,应该可以解决它。在哪里定义了event
?也许您需要将其指定为focus:function(event)
的参数?我的错误是,函数签名实际上是focus:function(event,ui)
。所以“event”确实是作为参数传递的。您可以为event.originalEvent.type
执行警报
或控制台.log
吗。结果是没有定义。当我在事件对象本身上执行console.log时,原始事件甚至不存在,这是问题的核心。
$("input").autocomplete({
source: /*...*/,
focus: function(event, ui) {
/* If the key that triggered this event is up or down arrow: */
if (event.which === 38 || event.which === 40) {
console.log('key');
}
else {
console.log('mouse');
}
}
});