原生js之document.createEvent建立自定义事件

document.createEvent用于创建事件,

在DOM Level 2 的事件中就有HTMLEvents,MouseEvents,UIEvents事件类型。DOM Level 3增加很多事件类型,个人觉得其中最有用的是CustomEvent自定义事件。

为DOM元素创建自定义事件的步骤为:

一、创建事件:var ev = document.createEvent(‘CustomEvent‘);

二、初始化事件:ev.initCustomEvent(‘自定义事件名称‘, false(是否允许冒泡), false(是否允许中断),args)

三、为DOM添加事件监听:element.addEventListener(‘自定义事件名称‘,fn,false)

四、分发(触发)自定义事件:element.dispatchEvent(ev)

<script>
 var comment = document.getElementsByTagName(‘a‘)[0];
 
if (document.all) {
 // For IE

comment.click();

} else if (document.createEvent) {
   //FOR DOM2
var ev = document.createEvent(‘HTMLEvents‘);

ev.initEvent(‘click‘, false, true);
 comment.dispatchEvent(ev);
}
</script>

语法:

createEvent(eventType)


参数


描述


eventType


想获取的 Event 对象的事件模块名。

关于有效的事件类型列表,请参阅"说明"部分。

返回值

返回新创建的 Event对象,具有指定的类型。

抛出

如果实现支持需要的事件类型,该方法将抛出代码为 NOT_SUPPORTED_ERR 的 DOMException异常。

说明

该方法将创建一种新的事件类型,该类型由参数 eventType 指定。注意,该参数的值不是要创建的事件接口的名称,而是定义那个接口的 DOM 模块的名称。

下表列出了 eventType 的合法值和每个值创建的事件接口:


参数


事件接口


初始化方法


HTMLEvents


HTMLEvent


iniEvent()


MouseEvents


MouseEvent


iniMouseEvent()


UIEvents


UIEvent


iniUIEvent()

用该方法创建了 Event 对象以后,必须用上表中所示的初始化方法初始化对象。关于初始化方法的详细信息,请参阅 Event对象参考。

该方法实际上不是由 Document 接口定义的,而是由 DocumentEvent 接口定义的。如果一个实现支持 Event 模块,那么 Document 对象就会实现 DocumentEvent 接口并支持该方法。

原文地址:https://www.cnblogs.com/zwjun/p/12628502.html

时间: 2024-11-05 16:11:12

原生js之document.createEvent建立自定义事件的相关文章

原生js方法document.getElementsByClassName在ie8及其以下的兼容性问题

原生js方法“document.getElementsByClassName”在ie8及其以下浏览器中,不能使用. 修改:加入兼容性判断,在需要用到该方法的位置修改为getClassNames方法. 代码如下: 原来方法: document.getElementsByClassName('tabs_div'): 这里的调用方法为:getClassNames('tabs_div' , 'div'): var divs = getClassNames('tabs_div' , 'div'); fun

原生js监听input值改变事件

哈哈哈,又来了,今天闲来无事,实验了下原生js监听input value值改变事件,下面就来说道说道: 本来写监听input值便获是用jquery的,之前的随笔写了,就是这个方法,地址:http://www.cnblogs.com/wteng/p/5434403.html $('input').bind('input propertychange', function() { //to do }) 现在用原生js来实现一遍(其实我翻了下jquery的监听事件on的源码,没找到不知道他写哪了),本

JS里关于事件的常被考察的知识点:事件流、事件广播、原生JS实现事件代理

1.JS里面的事件流 DOM2级事件模型中规定了事件流的三个阶段:捕获阶段.目标阶段.冒泡阶段,低版本IE(IE8及以下版本)不支持捕获阶段 捕获事件流:Netscape提出的事件流,即事件由页面元素接收,逐级向下,传播到最具体的元素. 冒泡事件流:IE提出的事件流,即事件由最具体的元素接收,逐级向上,传播到页面. 关于js事件,这里有一篇非常详细的介绍,可以看下:http://www.cnblogs.com/hyaaon/p/4630128.html 2.IE和W3C不同绑定事件解绑事件的方法

javascript和jquey的自定义事件小结

“通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用对象B的某个方法,实现交互:直接方法调用本质上也是属于一种特殊的发送与接受消息,它把发送消息和接收消息合并为一个动作完成: 方法调用方和被调用方被紧密耦合在一起:因为发送消息和接收消息是在一个动作内完成,所以无法做到消息的异步发送和接收: 2)对象A生成消息->将消息通知给一个事件消息处理器(Obs

创建自定义事件

为什么要自定义事件,自定义事件要使用在地方? 传统的事件不能满足我们的需求,所以我们需要自定义事件,比如传统的事件有单击,双击,但是突然某一天我想要三击 那就要用到自定义事件了,自定义事件一般使用在观察者模式上,比如主体需要发布各种消息通过创建各种自定义事件来实现,对于消息的订阅则通过注册监听器来实现. var test = document.getElementById("longen"); // 创建事件 var evt = document.createEvent('Event'

常用原生JS兼容写法

在我们前端开发中,经常会遇到兼容性的问题,因为要考虑用户会使用不同的浏览器来访问你的页面,你要保证你做的网页在任何一个浏览器中都能正常的运行,下面我就举几个常用原生JS的兼容写法: 1:添加事件方法 addHandler:function(element,type,handler){  if(element.addEventListener){//检测是否为DOM2级方法   element.addEventListener(type, handler, false);  }else if (e

jQuery与原生js的函数对比

原生js jQuery document.title $('title') docuemnt.getElementsByTagName('TagName') $('TagName') document.getElementById('id') $('#id') document.getElementsByClassName('ClassName') $('.ClassName') document.querySelectorAll('.Class Tag') $('.Class Tag') DO

js 自定义事件 document.createEvent

小demo 图片查看器 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>图片查看器</title> <style> ul{ list-style: none; display: flex; flex-wrap: wrap; } ul img{ width: 400px; } #mask{ posi

js原生创建模拟事件和自定义事件的方法

让我万万没想到的是,原来<JavaScript高级程序设计(第3版)>里面提到的方法已经是过时的了.后来我查看了MDN,才找到了最新的方法. 1. 模拟鼠标事件 MDN上已经说得很清楚,尽管为了保持向后兼容MouseEvent.initMouseEvent()仍然可用,但是呢,我们应该使用MouseEvent().我们使用如下页面做测试 1 <!DOCTYPE html> 2 <html> 3 <head lang="zh-CN"> 4