Home > Web Front-end > JS Tutorial > body text

Three ways to bind events in JavaScript and remove binding

高洛峰
Release: 2016-12-07 15:30:47
Original
1432 people have browsed it

In JavaScript, there are three commonly used methods of binding events

The first method

The function is written in the structure layer

It is very bad, making the page very confusing, and the behavior and structure cannot be separated

<input type="button" onclick="func();">
Copy after login

The second method of binding events

Benefits: Behavior and structure begin to be separated

Disadvantages:

In the second binding method, only one processing function can be bound to one time

That is, .onclick = fn1; . onclick = fn2 The final effect is onclick = fn2

<select name="xueli" >
 <option value="">请选择学历</option>
 <option value="大学" >大学</option>
 <option value="中学">中学</option>
 <option value="初中">初中</option>
 <option value="小学">小学</option>
</select>
<form action="">
 <p>Email:<input type="text" name="email">
  姓名:<input type="text" name="ming" >
 </p>
</form>
Copy after login

document.getElementsByTagName(&#39;select&#39;)[0].onclick= function (){
  alert(&#39;嘻嘻&#39;);
 }
document.getElementsByName(&#39;email&#39;)[0].onblur=function (){
 alert(&#39;哈哈哈&#39;);
}
Copy after login

window.onload = function(){
 var d = document.getElementById(&#39;school&#39;);
 function fn1(){
  alert(&#39;hello&#39;);
 }
 function fn2(){
  alert(&#39;world&#39;);
 }
 d.onclick = fn1;//赋值操作 最终显示fn2
 d.onclick = fn2;
}
Copy after login

The third way to bind events

//错误写法1
window.onload = function(){
 var d = document.getElementById(&#39;school&#39;);
 function fn1(){//this此时指向window
  this.style.background = &#39;blue&#39;;
 }
 function fn2(){//this此时指向window
  this.style.background = &#39;red&#39;;
 }
 //写一个匿名函数
 //最终的出现错误
 d.onclick = function (){
  fn1();
  fn2();
  //fn1 fn2是属性window的 实际上是这样 window.fn1() window.fn2()
   
   
 }
}
Copy after login

The following way of writing No problem, but two additional variables are added to the DOM tree

window.onload = function(){
 var d = document.getElementById(&#39;school&#39;);
 d.fn1 = function (){//fn1是d的属性 最终this此时指向DOM对象
  this.style.background = &#39;blue&#39;;
 }
 d.fn2 = function (){//this此时指向DOM对象
  this.style.background = &#39;red&#39;;
 }
  
 //匿名函数 调用上面两个函数
 d.onclick = function (){
  this.fn1();
  this.fn2();
 }
}
Copy after login

No longer using onclick

window.onload = function(){
 var d = document.getElementById(&#39;school&#39;);
 //达到了一次绑定两个函数
 d.addEventListener(&#39;click&#39;,function () {alert(&#39;blue&#39;);this.style.background =&#39;blue&#39;});
 d.addEventListener(&#39;click&#39;,function () {alert(&#39;red&#39;);this.style.background =&#39;red&#39;});
  
}
Copy after login

Removing binding cannot use anonymous functions Anonymous functions are generated and disappear at the time

var fn1 = function () {alert(&#39;blue&#39;);this.style.background =&#39;blue&#39;};
var fn2 = function () {alert(&#39;red&#39;);this.style.background =&#39;red&#39;};
  
function adde(){
  var d = document.getElementById(&#39;school&#39;);
  d.addEventListener(&#39;click&#39;,fn1);
  d.addEventListener(&#39;click&#39;,fn2);
 }
function reme(){
 var d = document.getElementById(&#39;school&#39;);
 //d.removeEventListener(&#39;click&#39;,fn1);//只剩fn1
 d.removeEventListener(&#39;click&#39;,fn2);
}
Copy after login

The third method of binding events under IE

<div id="school">
  
 </div>
 <input type="button" value="加事件" onclick="adde();">
 <input type="button" value="减事件" onclick="reme();">
Copy after login

var fn1 = function () {alert(&#39;blue&#39;);this.style.background =&#39;blue&#39;};
var fn2 = function () {alert(&#39;red&#39;);this.style.background =&#39;red&#39;};
  
function adde(){
  var d = document.getElementById(&#39;school&#39;);
  // IE6,7是后绑定的事件先发生
  d.attachEvent(&#39;onclick&#39;,fn1);
  d.attachEvent(&#39;onclick&#39;,fn2); //fn2先发生
 }
function reme(){
 var d = document.getElementById(&#39;school&#39;);
 //d.deltachEvent(&#39;click&#39;,fn1);//只剩fn1
 d.deltachEvent(&#39;click&#39;,fn2);
}
Copy after login


Related labels:
js
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!