在jQuery中触发keyup事件

时间:2015-08-28 16:29:15

标签: jquery events triggers listener

我的代码存在严重问题,而我正在创建的Chrome扩展程序注入该代码。从本质上讲,我需要一个keyup事件监听器来获取某个密钥,但我似乎无法获得它。

这里是我注入的代码(请注意,有很多冗余,因为我尝试了很多事情来触发事件监听器,我会清理它一旦我找到有效的代码。)

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事件设置了Event Listener Breakpoint时,代码永远不会爆发。

当我只是按下键盘上的一个键同时聚焦在输入字段内并且我为keyup事件设置了一个Event Listener Breakpoint时,源jquery.min.js和"(e)中断了"突出显示,这是此函数调用的参数:" f = v.handle = function(e)" ...请注意,只有一个断点正常发生,但如果我已经调用了我的函数,然后发生2个断点,因为我在keyup事件上生成了console.log。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

使用$.Event()创建请求的活动,而不是使用.trigger()

DEMO:JSnippet

CODE:

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