event.originalEvent не определено в событии фокуса с автозаполнением jQuery - PullRequest
4 голосов
/ 06 марта 2011

Мне нужно переопределить событие фокуса автозаполнения с помощью специального действия и сделать что-то в зависимости от того, выбирал ли пользователь из списка с помощью клавиатуры, а не мыши.Для этого я проверяю 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 ]

2 голосов
/ 06 марта 2011

Мне действительно удалось добраться до originalEvent, но я не думаю, что это поможет вам, даже если вы сможете его найти;посмотрите на консоль в следующем примере: http://jsfiddle.net/andrewwhitaker/DkumP/1/

Вы заметите, что type из 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/

0 голосов
/ 06 марта 2011

Спасибо за предложение, Эндрю.

Я забыл упомянуть, что использую jQuery UI 1.8.5, поэтому проверка свойства "which" также не работает для меня, так как оно также не определено,Обновление до 1.8.10 помогло, и оно начало работать.По всей видимости, все это было ошибкой в ​​1.8.5, которая была исправлена ​​позже.

Так что, если кто-то еще борется с подобной проблемой - обновите ее до последней версии, которая должна ее устранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...