You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为jQuery中通过代码触发的事件添加originalEvent

如何为代码触发的jQuery事件添加originalEvent属性

我写了一段代码,目前运行正常,但需要给它添加originalEvent属性——因为我要通过代码触发事件来检查event.originalEvent。代码如下:

$(document).ready(function () {
   var e = jQuery.Event( "keypress", { which: 32, keyCode: 32 } );
    $("#campaign_message_write textarea#campaign_body").keypress(function(e) {
      if (e.keyCode == 32) {
        console.log(e)
      } else {
        console.log(e)
      }
    })
$("#campaign_message_write textarea#campaign_body").trigger(e);
});

控制台日志对比

  • 代码触发事件时的日志:
    程序触发事件的控制台日志
  • 手动键盘触发事件时的日志:
    手动触发事件的控制台日志

我希望即使是通过代码触发事件,也能给事件对象添加上originalEvent,请问有没有实现方法?


可以直接在创建jQuery事件对象时手动添加originalEvent属性,模拟原生事件的结构即可。原生的originalEvent本身是一个原生事件对象,你可以先创建一个原生KeyboardEvent,再把它赋值给jQuery事件的originalEvent属性。

修改后的代码示例:

$(document).ready(function () {
    // 创建原生键盘事件
    var nativeEvent = new KeyboardEvent('keypress', {
        keyCode: 32,
        which: 32,
        bubbles: true, // 保持和jQuery事件一致的冒泡行为
        cancelable: true
    });
    // 创建jQuery事件并绑定原生事件作为originalEvent
    var e = jQuery.Event("keypress", { 
        which: 32, 
        keyCode: 32,
        originalEvent: nativeEvent 
    });

    $("#campaign_message_write textarea#campaign_body").keypress(function(e) {
        console.log(e);
    });

    $("#campaign_message_write textarea#campaign_body").trigger(e);
});

如果不需要完整的原生事件结构,只是要让originalEvent存在,也可以简单赋值一个包含必要属性的对象:

var e = jQuery.Event("keypress", { 
    which: 32, 
    keyCode: 32,
    originalEvent: { keyCode: 32, which: 32 } 
});

注:原生KeyboardEvent的属性在不同浏览器可能存在细微差异,可根据实际需求调整参数。


内容的提问来源于stack exchange,提问作者Naresh Kumar P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:42:43