Heim > Web-Frontend > js-Tutorial > Hauptteil

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

高洛峰
Freigeben: 2016-12-07 15:30:47
Original
1432 Leute haben es durchsucht

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();">
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

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;
}
Nach dem Login kopieren

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()
   
   
 }
}
Nach dem Login kopieren

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();
 }
}
Nach dem Login kopieren

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;});
  
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

Die dritte Möglichkeit, Ereignisse zu binden IE

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

 
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);
}
Nach dem Login kopieren

Verwandte Etiketten:
js
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!