javascript 带参数的触发事件

yh2wf1be  于 2022-12-02  发布在  Java
关注(0)|答案(4)|浏览(222)

这是相当烦人的。我只想在javascript中触发一个事件。我需要像往常一样将事件对象传递到参数中,并额外传递一个自定义参数。
在jQuery中,这将是超级简单的:

$('#element').trigger('myevent', 'my_custom_parameter');

但是我不想使用这个方法。我发现的所有其他与此相关的问题都建议“使用jQuery!”这是我正在开发的一个插件,一个方法需要jQuery是相当愚蠢的。有人能指出一种方法在跨浏览器兼容的普通JS中完成上述操作吗?

z4bn682m

z4bn682m1#

您可以创建自定义事件http://jsfiddle.net/9eW6M/
HTML语言

<a href="#" id="button">click me</a>

JS系统

var button = document.getElementById("button");
button.addEventListener("custom-event", function(e) {
    console.log("custom-event", e.detail);
});
button.addEventListener("click", function(e) {
    var event = new CustomEvent("custom-event", {'detail': {
        custom_info: 10,
        custom_property: 20
    }});
    this.dispatchEvent(event);
});

点击链接后输出:

custom-event Object {custom_info: 10, custom_property: 20}

更多信息可在此处找到。

t3psigkw

t3psigkw2#

Creating an event

To create a simple event, use the Event constructor.

var event = document.createEvent('MyEvent');

However, if you want to pass data along with the event use the CustomEvent constructor instead.

var event = CustomEvent('MyEvent', { 'detail': 'Wow, my very own Event!' });

Dispatching the event

You can then raise the event with targetElement.dispatchEvent .

var elem =document.getElementById('myElement');
elem.dispatchEvent(event);

Catching the event

elem.addEventListener('MyEvent', function (e) { console.log(e.detail); }, false);

For older browsers( Pre-IE9)

You have to use the document.createEvent function.

// Create the event.
var event = document.createEvent('Event');

// Define that the event name is 'build'.
event.initEvent('MyEvent', true, true);

//Any Element can dispatch the event
elem.dispatchEvent(event);

Note that this method is deprecated and should only be used for compatibility purposes.
More help : https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Events/Creating_and_triggering_events: MDN: Creating_and_triggering_events

cl25kdpy

cl25kdpy3#

事件对象和附加自定义参数
这对于原生DOM方法来说是不可能的。处理程序只使用一个参数调用,即事件对象。因此,如果有任何数据需要沿着,您需要将其作为事件对象的(自定义)属性。您可以使用DOM4 CustomEvent constructor来实现(参见MDN文档中的跨浏览器填充程序)。
然后使用dispatchEvent,就像您通常使用(自定义或本机)脚本触发的事件一样。

smtd7mpg

smtd7mpg4#

这是相当烦人的。我想只是触发一个事件在javascript中。我需要传递事件对象到参数像往常一样和一个额外的自定义参数
因此可以使用prototype扩展DOM并创建自己的方法,而不用使用jQuery(没有new customEvent())。
这里举个例子:(或者您可以修改它并在dispatchCustomEvent中发送回调函数)
第一个

相关问题