自定义事件的触发 dispatchEvent 的用法

简介: 自定义事件的触发 dispatchEvent 的用法

window.addEventListener && window.dispatchEvent

一、标准浏览器提供了可供元素触发的方法:element.dispatchEvent(),在使用之前,需要创建和初始化,下面是具体的用法:

vue中举例:

1.通过 var event = document.createEvent("HTMLEvents"); 这个方法创建一个event对象实例


2.通过 event.initEvent("aaa", true, true); 初始化一个aaa事件,// 3个参数:事件类型,是否冒泡,是否阻止浏览器的默认行为

注意:/*属性,可以随便自己定义*/

event.name = 'hello, 我是小礼';
event.message = '我今年18岁';


3.然后通过 window.dispatchEvent(event); 方法触发自定义事件aaathis.$nextTick(tick => {
     var event = document.createEvent("HTMLEvents");
     event.initEvent("aaa", true, true);
     window.dispatchEvent(event);
})

4.最后在需要监听这个事件的页面,通过window.addEventListener('aaa', function(){});即可监听到事件的执行

window.addEventListener('aaa', function (event) {
    console.log(event.name+','+event.message);
}, false);
//控制台就可以打印出监听的结果:hello, 我是小礼,我今年18岁

dispatchEvent大概就是这三步

下面再看看一段代码,非IE主流浏览器及IE下的事件触发器

var fireEvent = function(element,event){
      if (document.createEventObject) {
          // IE浏览器支持fireEvent方法
          var evt = document.createEventObject();
          return element.fireEvent('on'+event,evt)
      } else {
          // 其他标准浏览器使用dispatchEvent方法
          var evt = document.createEvent( 'HTMLEvents' );
          evt.initEvent(event, true, true);
          return !element.dispatchEvent(evt);
      }
};

document.creatEventObject()是IE创建event对象实例的方法,和document.creatEvent('HTMLEvents')在非IE主流浏览器下的作用相同,fireEvent是IE下的事件触发器,与dispatchEvent在非IE主流浏览器下作用相同。

交流

我是老礼,公众号「进军全栈攻城狮」作者 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!


相关文章
|
8月前
|
数据格式
【vue2事件传参1】自定义参数:在elementui的change事件中,自定义参数的传递方法
【vue2事件传参1】自定义参数:在elementui的change事件中,自定义参数的传递方法
718 1
【vue2事件传参1】自定义参数:在elementui的change事件中,自定义参数的传递方法
|
8月前
|
JavaScript
Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun
Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun
|
JavaScript
Vue学习之参数传递与事件分发使用this.$emit(‘自定义事件名‘, 参数)自定义事件删除待办事项
数据项在 Vue 的实例中,但删除操作要在组件中完成,那么组件如何才能删除 Vue 实例中的数据呢? 此时就涉及到参数传递与事件分发了,Vue 为我们提供了自定义事件的功能很好的帮助我们解决了这个问题;使用this.$emit(‘自定义事件名’, 参数),操作过程如下
203 0
|
JavaScript 前端开发 开发者
vue props传值后watch事件未触发的问题
vue props传值后watch事件未触发的问题
643 0
|
JavaScript 前端开发
详细解析DOM事件的event事件对象(二)
详细解析DOM事件的event事件对象(二) 上篇博客说到了DOM的键盘事件和鼠标事件的event对象,这次我们再来聊一聊event对象剩下的属性。 HTML代码: <div class="box">1</div> <div class="box">2</div> <div class="box">3</div> <div class="box">4</div> <div class="box">5</div> 1 2 3 4 5 CSS代码: *{ margin: 0;
|
JavaScript 前端开发
详细解析DOM事件的event事件对象(一)
JavaScript 86 篇文章 7 订阅 订阅专栏 详细解析DOM事件的event事件对象(一) 近期我们一直在学习DOM,马上到了尾期了,今天来说一下DOM事件的event事件对象。这里我们先解析一下键盘和鼠标事件的event对象属性。 HTML代码: <form> <input type="text" id="text"> <!-- <input type="submit"> --> <button>登录</button> </form> 1 2 3 4 5 1.键盘事件
|
JavaScript 前端开发
|
JavaScript
element-ui中下拉command传递多参数事件封装
element-ui中下拉command传递多参数事件封装
553 0
|
中间件 Python
callback回调函数和hook钩子函数的简单理解
callback回调函数和hook钩子函数的简单理解
329 0
|
索引
【mpvue】列表项组件事件前10个触发正常,后面的组件触发不正常
1、问题描述 父级列表页,将列表项做成自定义组件ItemList,监听子组件的click事件,获取当前子组件实例所在数组的索引值。 发现前10个子组件实例触发click时,console.log能正确输出该组件所在数组的索引值,但是后续的子组件实例触发click时输出的并非该组件所在数组的索引值。 下面是控制台打印的内容:
127 0

热门文章

最新文章