Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
event.OriginaleEvent在焦点事件中未定义,使用jQuery自动完成_Jquery_Jquery Ui_Jquery Plugins_Jquery Ui Autocomplete - Fatal编程技术网

event.OriginaleEvent在焦点事件中未定义,使用jQuery自动完成

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

我需要用自定义操作覆盖自动完成焦点事件,并根据用户是否使用键盘而不是鼠标从列表中进行选择来执行操作。为此,我正在检查event对象中的originalEvent.type,它应该包含执行的操作类型(keydown、keyup、mouseenter等)

然而,原始事件对象似乎没有定义,我不明白为什么。它在autocomplete代码中的实际焦点事件中工作正常,但在autocomplete对象中重写该事件时则不行

请看下面我的代码。我非常感谢你在这件事上的任何帮助,因为这让我发疯了

$( "#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');
        }
    }
});