DOM 事件绑定
DOM 提供了许多事件供开发者进行绑定,以响应各种操作,丰富 页面 交互。
想要触发事件,就得先给 DOM 节点绑定事件,提供事件处理器。
1. 直接在 HTML 上提供事件
这种方式是将事件内联在 HTML 代码 中。
< style >
. Box {
width : px ;
height : px ;
background : green ;
}
</ style >
< div class = " Box " onclick = " alert( ' 耶耶耶耶耶! ' ) " > </ div >
通过设置 HTML 的 onclick 属性 ,可以绑定点击事件, 属性 内可以写简单的 JavaScript 代码 。
但是可以看到这种方式是有局限性的,写大量的 JavaScript 代码 在里面肯定是不合理的。
过去网页的交互相对较少,会在 body 标签 上绑定 onload 事件,即 页面 加载完毕后做的事情。
< script >
function load ( ) {
alert ( ' 页面 加载完毕啦!' ) ;
}
</ script >
< body onload = " load() " >
< div > 我是一段滥竽充数文案。 </ div >
</ body >
onload="load()" 即表示在 页面 加载完成后,执行 load 函数 。现在翻阅部分文献,依然能够看到这种写法。
2. 设置事件处理器 属性
通过 事件处理器 属性 设置 绑定事件,需要先 获取 到 DOM 节点。
< style >
.btn {
border : px solid #4caf50 ;
font-size : px ;
padding : px px ;
color : #4caf50 ;
outline : none ;
}
.btn :active {
background : #eee ;
}
</ style >
< button class = " btn " >
我是 一个 可以改变一切的按钮
</ button >
< script >
var btn = document . querySelector ( '.btn' ) ;
btn . onclick = function ( ) {
var text = btn . innerText ;
btn . innerText = text . replace ( '一切' , '世界' ) ;
} ;
</ script >
通过 onclick 就可以设置按钮的点击事件。
如果需要清除事件,可以重新将 属性 重新设置为 null 。
< style >
.btn {
border : px solid #4caf50 ;
font-size : px ;
padding : px px ;
color : #4caf50 ;
outline : none ;
}
.btn :active {
background : #eee ;
}
p {
font-size : px ;
}
</ style >
< button class = " btn " >
我是 一个 可以改变一切的按钮
</ button >
< p > 1 </ p >
< script >
var btn = document . querySelector ( '.btn' ) ;
var p = document . querySelector ( 'p' ) ;
var total = ;
btn . onclick = function ( ) {
p . innerText = ++ total ;
if ( total >= ) {
btn . onclick = null ;
}
} ;
</ script >
这种绑定事件的方式依然常用,各种文献的 demo 也会采用这种方式,但缺点是同 一个 事件在没有其他辅助条件下,只能绑定 一个 事件处理器。
3. 使用 element.addEventListener 绑定事件
使用 DOM 节点的 addEventListener 方法 也可以绑定事件。
< style >
.btn {
border : px solid #4caf50 ;
font-size : px ;
padding : px px ;
color : #4caf50 ;
outline : none ;
}
.btn :active {
background : #eee ;
}
input {
padding : px px ;
font-size : px ;
outline : none ;
}
p {
font-size : px ;
}
</ style >
< input type = " text " >
< button class = " btn " >
按钮
</ button >
< p > 1 </ p >
< script >
var btn = document . querySelector ( '.btn' ) ;
var input = document . querySelector ( 'input' ) ;
var p = document . querySelector ( 'p' ) ;
var total = ;
btn . addEventListener ( 'click' , function ( ) {
input . value = input . value . split ( '' ) . reverse ( ) . join ( '' ) ;
btn . value = input . value ;
p . innerText = input . value ;
} ) ;
input . addEventListener ( 'keyup' , function ( ) {
btn . innerText = input . value ;
} ) ;
</ script >
addEventListener 的第 一个 参数是事件类型,和使用 事件处理器 属性 与 HTML内联事件 不同,这个 方法 的事件类型不需要 on 前缀。
第二个参数就是事件处理器,即触发事件时 要做 的事情。
使用 addEventListener 可以绑定多个事件处理器。
< style >
. btn {
border : 1px solid #4caf50 ;
font - size : 14px ;
padding : 8px 12px ;
color : #4caf50 ;
outline : none ;
}
. btn : active {
background : #eee ;
}
< / style >
< button class = "btn" >
按钮
< / button >
< p > < / p >
< script >
var btn = document . querySelector ( '.btn' ) ;
var p = document . querySelector ( 'p' ) ;
var total = ;
btn . addEventListener ( 'click' , function ( ) {
btn . innerText = ++ total ;
} ) ;
btn . addEventListener ( 'click' , function ( ) {
p . innerText = total ;
} ) ;
< / script >
一个 事件绑定多个事件处理器,其执行顺序是按照绑定顺序来的。
如果需要 去除 事件,可以使用 removeEventListener 方法 。
< style >
.btn {
border : px solid #4caf50 ;
font-size : px ;
padding : px px ;
color : #4caf50 ;
outline : none ;
}
.btn :active {
background : #eee ;
}
</ style >
< button class = " btn " >
按钮
</ button >
< script >
var btn = document . querySelector ( '.btn' ) ;
var total = ;
function fn ( ) {
btn . innerText = ++ total ;
if ( total > ) {
btn . removeEventListener ( 'click' , fn ) ;
}
}
btn . addEventListener ( 'click' , fn ) ;
</ script >
使用 removeEventListener 去除 事件,需要传递指定的事件,且事件处理器必须与绑定事件传入的一样,为同 一个 。
addEventListener 与 removeEventListener 还具有第三个参数,会在事件流章节进行讨论。
IE8及以下都 不支持 该 方法 ,需要使用IE提供的 attachEvent 与 detachEvent 来处理事件
4. DOM 事件级别
目前常讨论的 DOM 级别有 4 级,为 DOM 0级 至 DOM 3级 ,这里的 级 可以理解成标准的版本。
这 4 级 内容 中, DOM 1级 没有提供事件相关的 内容 ,所以不会拿来讨论,因此 DOM 事件就被分为了常说的 DOM 0级事件 、 DOM 2级事件 、 DOM 3级事件 。
DOM 0级 提供的事件绑定方式为在 HTML 上内联事件 与 事件处理器 属性 。 DOM 2级 提供了 addEventListener 与 removeEventListener 方法 。 DOM 3级 则是在 2 级的基础上进行了扩充, 添加 了更多的事件类型。
事实上 DOM 0级事件并不是标准中的,在 W3C 制定 DOM 标准前,部分浏览器已经有了 DOM 模型,也有自己相应的事件,这些出现在标准第 一个 版本之前的,就被称为了 DOM 0 。
5. 小结
绑定 DOM 事件可以通过以下三种方式:
将事件内联在 HTML 中 使用 事件处理器 属性 绑定事件 使用 addEventListener 与 removeEventListener 处理事件
前两种方式不能绑定多个事件处理器,三种绑定方式由不同版本的 DOM 标准提供,通常使用 DOM 级别进行区分。
DOM 事件对象 ? ?DOM 与事件声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did92422