自定义事件

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);

自定义事件javascript的更多相关文章

  1. Javascript之自定义事件

    Javascript自定义事件,其本质就是观察者模式(又称订阅/发布模式),它的好处就是将绑定事件和触发事件相互隔离开,并且可以动态的添加.删除事件. 下面通过实例,一步一步构建一个具体的Javasc ...

  2. javascript事件之:谈谈自定义事件(转)

    http://www.cnblogs.com/pfzeng/p/4162951.html 对于JavaScript自定义事件,印象最深刻的是用jQuery在做图片懒加载的时候.给需要懒加载的图片定义一 ...

  3. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  4. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  5. javascript事件之:谈谈自定义事件

    对于JavaScript自定义事件,印象最深刻的是用jQuery在做图片懒加载的时候.给需要懒加载的图片定义一个appear事件.当页面图片开始出现时候,触发这个自定义的appear事件(注意,这里只 ...

  6. JavaScript自定义事件

    很多DOM对象都有原生的事件支持,向div就有click.mouseover等事件,事件机制可以为类的设计带来很大的灵活性,相信.net程序员深有体会.随着web技术发展,使用JavaScript自定 ...

  7. javascript:自定义事件初探

    javascript:自定义事件初探   http://www.cnblogs.com/jeffwongishandsome/archive/2008/10/27/1317148.html

  8. Javascript 自定义事件 (custom event)

    Javascript 中经常会用到自定义事件.如何创建一个简单的自定义事件呢?在创建自定义的事件之前,我们应该考虑一下和事件有关的东西.例如 click 事件,首先我们要能注册一个click事件(在一 ...

  9. 理解的javascript自定义事件

    理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...

随机推荐

  1. abstract类与interface

    抽象类: 1.用abstract修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体:         2.抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法 ...

  2. HttpServletRequest的方法详细说明

    1.Java 部分request.getHeader()详细说明 == JAVA 部分request.getHeader() 详细说明== System.out.println("rotoc ...

  3. selenium基础(脚本模块化)

    selenium基础(脚本模块化)

  4. login-Linux必学的60个命令

    1.作用 login的作用是登录系统,它的使用权限是所有用户. 2.格式 login [name][-p ][-h 主机名称] 3.主要参数 -p:通知login保持现在的环境参数. -h:用来向远程 ...

  5. 【学术篇】oj.jzxx.net2701 无根树

    这是一道来自OIerBBS的题目.. 原帖地址:http://www.oierbbs.com/forum.php?mod=viewthread&tid=512?fromuid=71 (似乎是个 ...

  6. JavaScript变量名与函数名的命名规范

    JavaScrip变量名与函数名的命名规范严格遵循以下5条: (1)首字符必须是字母.下划线.$,后跟任意的字母.数字.下划线.$ (2)严格区分大小写 (3)不能使用系统的关键字和保留字 (4)命名 ...

  7. 解决mysql中无法修改事务隔离级别的问题

    使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;修改数据库隔离级别, 然后执行SELECT @@TX_ISOLATION;后发现数据库的隔离级别并 ...

  8. 【BZOJ3223】【luoguP3391】文艺平衡树

    description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...

  9. ActiveMQ 知识点

    消息队列高可用 持久化,事务,签收,zookeeper+replicated-leveldb-store的主从集群 异步发送 同步发送: 明确指定同步发送 未使用事务的前提下,发送持久化消息(会使用同 ...

  10. 威胁预警|首现新型RDPMiner挖矿蠕虫 受害主机易被添加恶意账户

    近日,阿里云安全发现一种新型挖矿蠕虫RDPMiner,通过爆破Windows Server 3389端口RDP服务的方式进行挖矿木马传播,致使用户CPU占用率暴涨,机器卡顿,更被创建名为Default ...