2015-08-28 622 views
1

我的代码被我正在创建的Chrome扩展注入的严重问题。本质上,我需要一个keyup事件监听器来拾取某个键,但我似乎无法得到它。在jQuery中触发一个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事件时,代码不会出现。

当我简单地按住键盘上的某个键,同时关注输入字段,并且为键盘事件设置了事件监听器断点时,源jquery.min.js中断,“(e)”为突出显示,这是该函数调用的参数:“f = v.handle = function(e)”...请注意,只有一个断点正常发生,但是如果我已经调用了我的函数,则会发生2个断点,因为我在关键事件中生成console.log。

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

回答

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); 
} 
+0

的问题是,即使你给我的代码似乎被其他KEYUP听众有所回升。如果转到JSnippet页面,打开开发工具并设置关键事件的事件断点,则即使将e.which打印到控制台并设置为iElement中的值,也不会在运行代码时中断。但是,如果您关注html输入并开始输入,则触发断点。 –