如何为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
相关产品推荐
相关产品推荐

