我已经使用addEventListener将事件附加到文本框。它工作得很好。当我想从另一个函数以编程方式触发事件时,问题就出现了。
我该怎么做呢?
我已经使用addEventListener将事件附加到文本框。它工作得很好。当我想从另一个函数以编程方式触发事件时,问题就出现了。
我该怎么做呢?
当前回答
一个工作的例子:
// Add an event listener
document.addEventListener("name-of-event", function(e) {
console.log(e.detail); // Prints "Example of an event"
});
// Create the event
var event = new CustomEvent("name-of-event", { "detail": "Example of an event" });
// Dispatch/Trigger/Fire the event
document.dispatchEvent(event);
对于较旧的浏览器填充和更复杂的示例,请参阅MDN文档。
请参阅EventTarget的支持表。dispatchEvent和CustomEvent。
其他回答
如果你不想使用jQuery,也不特别关心向后兼容性,可以使用:
let element = document.getElementById(id);
element.dispatchEvent(new Event("change")); // or whatever the event type might be
请在这里和这里查看文档。
编辑:根据你的设置,你可能想要添加气泡:true:
let element = document.getElementById(id);
element.dispatchEvent(new Event('change', { 'bubbles': true }));
你想要的是这样的:
document.getElementByClassName("example").click();
使用jQuery,它是这样的:
$(".example").trigger("click");
如果你使用jQuery,你可以简单做到
$('#yourElement').trigger('customEventName', [arg0, arg1, ..., argN]);
然后用
$('#yourElement').on('customEventName',
function (objectEvent, [arg0, arg1, ..., argN]){
alert ("customEventName");
});
[arg0, arg1,…], argN]表示这些参数是可选的。
var btn = document.getElementById('btn-test');
var event = new Event(null);
event.initEvent('beforeinstallprompt', true, true);
btn.addEventListener('beforeinstallprompt', null, false);
btn.dispatchEvent(event);
这将立即触发一个事件'beforeinstallprompt'
function fireMouseEvent(obj, evtName) {
if (obj.dispatchEvent) {
//var event = new Event(evtName);
var event = document.createEvent("MouseEvents");
event.initMouseEvent(evtName, true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
obj.dispatchEvent(event);
} else if (obj.fireEvent) {
event = document.createEventObject();
event.button = 1;
obj.fireEvent("on" + evtName, event);
obj.fireEvent(evtName);
} else {
obj[evtName]();
}
}
var obj = document.getElementById("......");
fireMouseEvent(obj, "click");