markdown JS事件绑定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown JS事件绑定相关的知识,希望对你有一定的参考价值。

### 在DOM中直接绑定

```
//原生函数
<input onclick="alert('谢谢支持')" type="button" value="点击我,弹出警告框" />
```

```
//自定义函数
<input onclick="myAlert()" type="button" value="点击我,弹出警告框" />
<script type="text/javascript">
  function myAlert(){
    alert("谢谢支持");
  }
</script>
```

### 在JS代码中绑定

```
element.onclick=function(){
   //处理函数
}
```

```
<input id="demo" type="button" value="点击我,显示 type 属性" />
<script type="text/javascript">
  document.getElementById("demo").onclick=function(){
    alert(this.getAttribute("type")); // this 指当前发生事件的HTML元素,这里是<div>标签
  }
</script>
```

优点:写法兼容到主流浏览器

缺点:当同一个element元素绑定多个事件时,只有最后一个事件会被添加

例如:

```
element.onclick=handler1;
element.onclick=handler2;
element.onclick=handler3;
```
上述只有handler3会被添加执行,所以我们使用另外一种方法添加事件

### 绑定事件监听函数:attachEvent和addEvenListener方法
```
//IE:attachEvent
elment.attachEvent("onclick",handler1);
elment.attachEvent("onclick",handler2);
elment.attachEvent("onclick",handler3);
上述三个方法执行顺序:3-2-1;

//标准addEventListener
elment.addEvenListener("click",handler1,false);
elment.addEvenListener("click",handler2,false);
elment.addEvenListener("click",handler3,false);
执行顺序:1-2-3;

//该方法的第三个参数是泡沫获取(涉及到JavaScript事件流的概念),是一个布尔值:当为false时表示由里向外,true表示由外向里

<div id="id1">
    <div id="id2"></div>
</div>

document.getElementById("id1").addEventListener("click",function(){console.log('id1');},false);
document.getElementById("id2").addEventListener("click",function(){console.log('id2');},false);
//点击id=id2的div,先在sonsole中输出,先输出id2,在输出id1

document.getElementById("id1").addEventListener("click",function(){console.log('id1');},false);
document.getElementById("id2").addEventListener("click",function(){console.log('id2');},true);
//点击id=id2的div,先在sonsole中国输出,先输出id1,在输出id2
```

addEventListener()是标准的绑定事件监听函数的方法,

是W3C所支持的,Chrome、FireFox、Opera、Safari、IE9.0及其以上版本都支持该函数;

但是,IE8.0及其以下版本不支持该方法,它使用attachEvent()来绑定事件监听函数。

所以,这种绑定事件的方法必须要处理浏览器兼容问题。

***

下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持:
```
function addEvent(obj,type,handle){
try{ // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
obj.addEventListener(type,handle,false);
}catch(e){
try{ // IE8.0及其以下版本
obj.attachEvent('on' + type,handle);
}catch(e){ // 早期浏览器
obj['on' + type] = handle;
}
}
}

//这里使用 try{ ... } catch(e){ ... } 代替 if ... else... 语句,避免浏览器出现错误提示。

//例如,为一个 id="demo" 的按钮绑定事件,鼠标单击时弹出警告框:

addEvent(document.getElementById("demo"),"click",myAlert);
function myAlert(){
alert("又是一个警告框");
}
```

以上是关于markdown JS事件绑定的主要内容,如果未能解决你的问题,请参考以下文章

markdown 同时为多个元素绑定事件

markdown ios绑定事件无效

markdown 事件绑定(Binding de Eventos)

js如何取消鼠标滚轮绑定的事件

js如何清除所有绑定的事件?

js中事件绑定