我正在创建的 Chrome 扩展程序注入(inject)的代码存在严重问题。本质上,我需要一个 keyup 事件监听器来拾取某个键,但我似乎无法获取它。
这是我要注入(inject)的代码(请注意,有很多冗余,因为我尝试了很多方法来让它触发事件监听器,一旦找到有效的代码,我就会清理它) .
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 element”将打印到控制台。但是,当调用此函数并且我为 keyup 事件设置了事件监听器断点时,代码永远不会中断。
当我在专注于输入字段的同时按下键盘上的一个键并且为 keyup 事件设置了事件监听器断点时,源 jquery.min.js 中出现中断,并且“(e)”突出显示,这是此函数调用的参数:“f=v.handle=function(e)”...请注意,通常只会发生一个断点,但如果我已经调用了我的函数,则会发生 2 个断点,因为我'我在 keyup 事件上生成 console.log。
非常感谢任何帮助,谢谢!
最佳答案
使用$.Event()
创建请求的事件,然后使用.trigger()
。
演示: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);
}
关于jquery - 在 jQuery 中触发 keyup 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275716/