自定义事件
1、event构造函数自定义事件
/*
* 自定义一个名为build的事件
* bubbles :事件是否冒泡
* cancelable:是否阻止事件的默认操作
* composed:指示事件是否将触发影子根外部的侦听器
*/
var buildEvent = new Event('build',{"bubbles":true, "cancelable":false,"composed":false}
);
//监听自定义定义的build事件 elem=getElemntById("xx").addEventListener()或者document.addEventListener()
elem.addEventListener('build', function (e) {
/* 类似elem.onclick */
}, false); //手动触发事件,自定义的浏览器是捕获不到的需要用下面的代码手动触发 elem.dispatchEvent(buildEvent);
2、CustomEvent()自定义事件
为了向事件对象添加更多数据,存在CustomEvent接口,并且可以使用详细信息属性传递自定义数据。 例如,可以如下创建事件
var event = new CustomEvent('build', { detail: elem.dataset.time });
面的代码允许你在事件监听器中访问更多的数据:
function eventHandler(e) { log('The time is: ' + e.detail); }
例子:
obj=document.querySelector('form') // 可以监听为定义的事件,我们在后面补上就行 obj.addEventListener("cat", function(e) { process(e.detail) }); // 创建自定义事件 var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}}); //手动触发事件 obj.dispatchEvent(event);
模拟鼠标点击事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>simulate click</title> </head> <body> <input type="button" value="clickMe" id="demo_click"> <script> const btn = document.getElementById('demo_click'); btn.onclick = function () { // alert('click complete!'); }; simulateClick(); // 2. 模拟 浏览器的鼠标点击事件 // 2.1 可以触发 onclick 事件(先触发) // 2.2 可以触发 addEventListener 事件(后触发) // 2.3 jQuery 的事件绑定底层就是 addEventListener , function simulateClick() { // 模拟 浏览器的鼠标点击事件 const event = new MouseEvent('click', { view: window, bubbles: true, cancelable: true }); btn.dispatchEvent(event); } </script> </body> </html>
或者
var e = document.createEvent("MouseEvents"); e.initEvent("click", true, true); document.getElementById("clickme").dispatchEvent(e); //只要id 就好 或者 var obj = document.getElementById("obj"); //obj元素上绑定click事件 obj.addEventListener('click', function (event) { alert(event.eventType); }, false); var event1 = document.createEvent('HTMLEvents'); event1.initEvent("click", true, true); event1.eventType = 'message'; //触发obj元素上绑定click事件 obj.dispatchEvent(event1);
IE<9为fireEvent方法
//document上绑定自定义事件ondataavailable document.attachEvent('ondataavailable', function (event) { alert(event.eventType); }); var obj=document.getElementById("obj"); //obj元素上绑定click事件 obj.attachEvent('onclick', function (event) { alert(event.eventType); }); //调用document对象的createEventObject方法得到一个event的对象实例。 var event = document.createEventObject(); event.eventType = 'message'; //触发document上绑定的自定义事件ondataavailable document.fireEvent('ondataavailable', event); //触发obj元素上绑定click事件 document.getElementById("test").onclick = function () { obj.fireEvent('onclick', event); };
3、废弃的旧方法
// Create the event. var event = document.createEvent('Event'); // Define that the event name is 'build'. event.initEvent('build', true, true); // Listen for the event. elem.addEventListener('build', function (e) { // e.target matches elem }, false); // target can be any Element or other EventTarget. elem.dispatchEvent(event);