event.originalEvent在jQuery自动完成的焦点事件中未定义

时间:2011-03-06 00:53:35

标签: jquery jquery-ui jquery-plugins jquery-ui-autocomplete

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

然而,originalEvent对象似乎未定义,我无法理解为什么。它在自动完成代码中的实际焦点事件中工作得很好,但是当我在自动完成对象中覆盖该事件时却没有。

请参阅下面的代码。我很感激这方面的任何帮助,因为它正在驱使我香蕉。

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

2 个答案:

答案 0 :(得分:2)

我实际上能够到达originalEvent,但即使你可以检索它,我也不认为它有帮助;在以下示例中查看控制台:http://jsfiddle.net/andrewwhitaker/DkumP/1/

你会注意到type的{​​{1}}是originalEvent,我认为这不是你所期待的。

完成您要执行的操作的一种可能方法是检查menufocus,看看它是向上箭头还是向下箭头(假设这些是您可以在自动完成小部件中使用的唯一键):

event.which

以下是一个示例:http://jsfiddle.net/andrewwhitaker/DkumP/2/

答案 1 :(得分:0)

感谢你的建议,安德鲁。

我忘了提到我使用的是jQuery UI 1.8.5,因此检查“which”属性对我来说不起作用,因为它也是未定义的。升级到1.8.10帮助了它,它开始工作。显然,这一切都是1.8.5中的一个错误,后来修复了。

所以,如果其他人正在努力解决类似的问题 - 升级到最新版本,应该解决它。