我的代码存在严重问题,而我正在创建的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。
非常感谢任何帮助,谢谢!
答案 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);
}