【问题标题】:Trigger a keyup event in jQuery在 jQuery 中触发 keyup 事件
【发布时间】:2015-08-28 16:29:14
【问题描述】:

我正在创建的 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 element”被打印到控制台。但是当这个函数被调用并且我为 keyup 事件设置了一个事件监听器断点时,代码永远不会中断。

当我在输入字段内聚焦时简单地按下键盘上的一个键并且我为按键事件设置了一个事件侦听器断点,源 jquery.min.js 中有一个中断并且“(e)”被突出显示,这是此函数调用的参数:“f=v.handle=function(e)”... 请注意,正常情况下只会发生一个断点,但如果我已经调用了我的函数,那么会发生 2 个断点,因为我' m 在 keyup 事件上生成 console.log。

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

【问题讨论】:

    标签: jquery events triggers listener


    【解决方案1】:

    使用$.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);
    }
    

    【讨论】:

    • 问题是,即使你给我的代码似乎也被其他 keyup 监听器拾取。如果您转到 JSnippet 页面,打开开发工具并为 keyup 事件设置事件断点,即使 e.which 打印到控制台并设置为 iElement 中的值,它也不会在您运行代码时中断。但是,如果您关注 html 输入并开始输入,则会触发断点。
    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多