2016-01-02 3 views
1

В JavaScript, я следующее событие я пытаюсь вызвать с помощью trigger() функции JQuery в:IndexOf Ошибка при Запускающем событии

document.addEventListener('keydown', function(e) { 
    (
    // e.which == 34 || PAGE DOWN 
    // e.which == 32 || SPACE 
    axis == 'X' && e.which == 39 // RIGHT 
    // axis == 'Y' && e.which == 40 // BOTTOM 
) && deck.next(); 
    (
    // e.which == 33 || PAGE UP 
    axis == 'X' && e.which == 37 // LEFT 
    // axis == 'Y' && e.which == 38 // TOP 
) && deck.prev(); 
}); 

Я пытаюсь вызвать этот слушатель событий, используя следующую строку:

$(document).trigger({eventType:"keydown", which:39}); 

Однако, когда я делаю это, я получаю следующее сообщение об ошибке:

Uncaught TypeError: q.indexOf is not a function

Надеюсь, вместо этого, что триггеры линии deck.next();

Просьба сообщить, что я делаю неправильно.

+0

Пожалуйста, добавьте часть кода, где вы используете 'indexOf' –

+0

@Bek 'var e = jQuery.Event (" keydown "); e.which = 39; // # Некоторое значение кода ключа $ (document) .trigger (e); 'не работает для меня, как указывает этот ответ. –

+0

@ che-azeh Я никогда не использую это, это просто сообщение об ошибке jquery, и именно поэтому я этого не понимаю. Сообщение об ошибке вызывается после '$ (document) .trigger ({eventType:" keydown ", который: 39});' –

ответ

2

добавить JQuery событие слушателем, а затем в него войти
(вам нужно Jquery слушателя событий, потому что вы вызывая его с JQuery)

$(document).on('keydown', function(e) { 
    (
    // e.which == 34 || PAGE DOWN 
    // e.which == 32 || SPACE 
    axis == 'X' && e.which == 39 // RIGHT 
    // axis == 'Y' && e.which == 40 // BOTTOM 
) && deck.next(); 
    (
    // e.which == 33 || PAGE UP 
    axis == 'X' && e.which == 37 // LEFT 
    // axis == 'Y' && e.which == 38 // TOP 
) && deck.prev(); 
}); 

и запустить его, как этот

var e = jQuery.Event("keydown"); 
e.which = 39; // # Some key code value 
$(document).trigger(e); 
+0

Спасибо! Можете ли вы объяснить, почему первоначальный прослушиватель событий не запускался? Это потому, что он не использовал синтаксис jquery? –

+0

добавил, что в моем ответе – Bek

0

Я думаю, ваш код запуска синтаксически неверен

var e = jQuery.Event("keydown"); 
e.which = 39; 
$(document).trigger(e); 

Кроме того, триггер jQuery не распознает обработчики, прикрепленные простым javascript. Поэтому вам нужно прикрепить обработчики, используя только jquery. Что-то вроде этого:

$(document).keydown(function(event){}); 

или

$(document).on('keydown',function(event){}); 

или

$(document).bind('keydown',function(event){}); 
+0

Это не работает, как вы думаете, это связано с тем, что в прослушивателе событий есть потребность в оси, которую нужно каким-то образом включить? –

+0

@SummerDeveloper, обновленный в ответ. –

2
$(document).trigger("keydown", {which: 39}); 

Это correct syntax ...

+0

Это не работает, как вы думаете, это потому, что в слушателе событий есть потребность в оси, которую нужно как-то включить? –

+0

То есть для запуска события внутри. Вы также можете сделать это, я считаю, что создать «реальное» событие https://jsfiddle.net/DerekL/mjs5cfnh/ –

+0

@SummerDeveloper посмотреть на мой пример ниже, вам нужен jquery event listener, поскольку он запускается jquery, вы все равно можете используйте этот синтаксис для запуска события, хотя – Bek

Смежные вопросы