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

我需要使用自定义操作覆盖自动完成焦点事件,并根据用户是使用键盘而不是鼠标从列表中进行选择来执行某些操作.为此,我正在检查事件对象中的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;
    }
});

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

您会注意到originalEvent的类型是menufocus,我认为这不是您所期望的.

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

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

这是一个例子:http://jsfiddle.net/andrewwhitaker/DkumP/2/

点赞