转自:https://www.cnblogs.com/tiger95/p/6962059.html
事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法。
一般我们在元素上绑定事件后,是靠用户在这些元素上的鼠标行为来捕获或者触发事件的,或者自带的浏览器行为事件,比如click,mouseover,load等等,有些时候我们需要自定义事件或者在特定的情况下需要触发这些事件。这个时候我们可以使用IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法。
例如在ie下看看这个例子:
01 |
//document上绑定自定义事件ondataavailable |
02 |
document.attachEvent( 'ondataavailable' , function (event) { |
03 |
alert(event.eventType); |
05 |
var obj=document.getElementById( "obj" ); |
07 |
obj.attachEvent( 'onclick' , function (event) { |
08 |
alert(event.eventType); |
10 |
//调用document对象的createEventObject方法得到一个event的对象实例。 |
11 |
var event = document.createEventObject(); |
12 |
event.eventType = 'message' ; |
13 |
//触发document上绑定的自定义事件ondataavailable |
14 |
document.fireEvent( 'ondataavailable' , event); |
16 |
document.getElementById( "test" ).onclick = function () { |
17 |
obj.fireEvent( 'onclick' , event); |
fireEvent的官方文档:http://msdn.microsoft.com/en-us/library/ms536423(v=vs.85).aspx
createEventObject的官方文档:http://msdn.microsoft.com/en-us/library/ie/ms536390(v=vs.85).aspx
再看看高级浏览器(chrome,firefox等)的例子:
01 |
//document上绑定自定义事件ondataavailable |
02 |
document.addEventListener( 'ondataavailable' , function (event) { |
03 |
alert(event.eventType); |
05 |
var obj = document.getElementById( "obj" ); |
07 |
obj.addEventListener( 'click' , function (event) { |
08 |
alert(event.eventType); |
10 |
//调用document对象的 createEvent 方法得到一个event的对象实例。 |
11 |
var event = document.createEvent( 'HTMLEvents' ); |
13 |
// 事件类型,是否冒泡,是否阻止浏览器的默认行为 |
14 |
event.initEvent( "ondataavailable" , true , true ); |
15 |
event.eventType = 'message' ; |
16 |
//触发document上绑定的自定义事件ondataavailable |
17 |
document.dispatchEvent(event); |
19 |
var event1 = document.createEvent( 'HTMLEvents' ); |
20 |
event1.initEvent( "click" , true , true ); |
21 |
event1.eventType = 'message' ; |
23 |
document.getElementById( "test" ).onclick = function () { |
24 |
obj.dispatchEvent(event1); |
在实际封装中没这么简单,看了一下jQuery.event.trigger的源码(http://www.css88.com/tool/jQuerySourceViewer/#v=1.7.2&fn=jQuery.event.trigger),是通过模拟来实现了,给某元素绑定一个事件处理函数,如果有触发事件的实际操作就会执行相应的事件处理函数,所以要达到事件触发器的功能只要获取到相应的事件处理函数然后执行。
最新文章
- jmeter之线程组的使用
- [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)
- Google分布式构建软件之三:分布式执行构建步骤
- ActiveMQ的静态网络链接
- ipython notebook 显示图
- git之旅【第二篇】
- unity3d 日志捕捉
- Apache中RewriteCond规则参数介绍
- [codility]CountDiv
- sql server 2012 5120错误
- 三点半们耐热i哦好家哦i囧囧【
- App上架应用市场,如何攻破安全过检难题
- 解决ajax跨域访问sessionid不一致问题
- 盒子模型(Box Model)
- Log4j日志根据配置输出到多个自定义文件
- docker 在windows7 、8下的安装
- Bug 14143011 : ORA-19606: CANNOT COPY OR RESTORE TO SNAPSHOT CONTROL FILE
- JSON字符串转C#实体Class类
- springboot工程的添加方式
- Maven配置dubbo环境简单例子
热门文章
- ListView中button监听器 设置 及 优化
- Allegro布线基本操作
- Intel平台map
- class中的私有属性的访问
- [未完结]数字微分分析法的直线绘制(DDA)
- poj 1163 The Triangle &;amp;poj 3176 Cow Bowling (dp)
- 在给mysql数据库备份时,报错: mysqldump: Got error: 145: Table '.\shengdaxcom\pre_forum_thread' is marked as c rashed and should be repaired when using LOCK TABLES
- SQL的分页算法
- ubuntun16.04不支持intel的最新网卡,升级到17.10后解决
- buntu下命令行安装jdk,android-studio,及genymotion虚拟机来进行android开发【转】