Heim  >  Artikel  >  Web-Frontend  >  Drei Möglichkeiten, Ereignisse in JavaScript zu binden und die Bindung zu entfernen

Drei Möglichkeiten, Ereignisse in JavaScript zu binden und die Bindung zu entfernen

高洛峰
高洛峰Original
2016-12-07 15:30:471433Durchsuche

In JavaScript gibt es drei häufig verwendete Methoden zum Binden von Ereignissen

Die erste Methode

Die Funktion wird in die Strukturebene geschrieben

Sehr schlimm, es macht die Seite sehr verwirrend und das Verhalten und die Struktur können nicht getrennt werden

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

Die zweite Möglichkeit, Ereignisse zu binden

Vorteile: Verhalten und Struktur beginnen sich zu trennen

Nachteile:

Bei der zweiten Bindungsmethode kann nur eine Verarbeitungsfunktion an eine Zeit gebunden werden

Das heißt, .onclick = fn1; .onclick = fn2 Der endgültige Effekt ist 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>

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

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;
}

Der dritte Weg, Ereignisse zu binden

//错误写法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()
   
   
 }
}

Mit dem folgenden Weg gibt es kein Problem des Schreibens, aber der DOM-Baum fügt zwei zusätzliche Variablen hinzu

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();
 }
}

verwendet onclick nicht mehr

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;});
  
}

Sie können anonyme Funktionen nicht zum Entfernen der Bindung verwenden. Anonyme Funktionen verschwinden, wenn sie generiert werden.

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);
}

Die dritte Möglichkeit, Ereignisse zu binden IE

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

 
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);
}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn