2015-08-28 3 views
1

У меня возникают серьезные проблемы с моим кодом, который вводится расширением Chrome, которое я создаю. По сути, мне нужен прослушиватель событий keyup для получения определенного ключа, но я не могу его получить.Запуск события keyup в jQuery

Вот код, который я впрыскиваю (обратите внимание, что есть много избыточности, потому что я пытаюсь много вещей, чтобы заставить его запускать прослушиватель событий, я очищу его, как только найду код, который работает).

function simulateKey(iElement) { 
    $(iElement).focus(); 

    var e = jQuery.Event("keyup"); 
    e.which = 37; 
    e.keyCode = 37; 
    e.charCode = 0; 

    $(iElement).keyup(function() { 
     console.log("keyup element"); 
    }); 

    $(iElement).trigger(e); 

    var f = jQuery.Event("keyup"); 
    f.which = 70; 
    e.keyCode = 70; 
    f.ctrlKey = true; 
    f.shiftKey = true; 

    $(iElement).trigger(f); 
    $ (document).trigger(f); 
    $ (window).trigger(f);  
} 

Когда эта функция вызывается, входной элемент становится сфокусированным, а на клавиатуре печатается «элемент ключа». Но когда эта функция вызывается и у меня есть контрольная точка прослушивателя событий, установленная для событий keyup, код никогда не прерывается.

Когда я просто нажимаю клавишу на моей клавиатуре, когда сфокусирован внутри поля ввода, и у меня есть контрольная точка прослушивателя событий, установленная для событий keyup, есть разрыв в исходном jquery.min.js и "(e)" является выделенный параметр, который является параметром для этого вызова функции: «f = v.handle = function (e)» ... Обратите внимание, что только одна точка останова происходит нормально, но если я уже вызвал свою функцию, тогда 2 точки останова происходят, потому что я генерируя этот console.log для событий keyup.

Любая помощь очень ценится, спасибо!

ответ

0

$.Event() Для того, чтобы отправить информацию, указанную в Запросе событий, используйте .trigger().

DEMO: JSnippet

КОД:

$(function() { 
    var $iElement = $('#logit'); 
    $iElement.keyup(function(e) { 
     console.log(e.which); 
     $(this).val(e.which); 
    }); 
    simulateKey($iElement); 
}); 


function simulateKey($iElement) { 
    var e = $.Event('keyup'); 
    e.which = 65; // Character 'A' 
    $iElement.trigger(e); 
} 
+0

Проблема заключается в том, что даже код, который вы дадите мне действительно кажется, подхватили другие KeyUp слушателей. Если вы перейдете на страницу JSnippet, откройте инструменты разработчика и установите точку прерывания событий для событий keyup, она не будет прерываться при запуске кода, даже если e.which печатается на консоль и устанавливается как значение в iElement. Но, если вы фокусируете ввод html и начинаете печатать, срабатывает точка останова. –

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