Heim > Web-Frontend > js-Tutorial > Hauptteil

Ausführliche Erläuterung der Beispiele für JavaScript-Bindungsüberwachungsfunktionen für Ereignishandles_Javascript-Kenntnisse

WBOY
Freigeben: 2016-05-16 15:25:43
Original
1063 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt, wie JavaScript Listening-Funktionen an Event-Handler bindet. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Das Binden von Event-Listening-Funktionen an Dom-Elemente in JavaScript ist eine sehr häufige Sache, aber es gibt auch hier viele Fehler. Verschiedene Browser bieten viele Methoden zur Ereignisbindung, aber nur drei sind zuverlässig:

1. Traditionelle Bindemethode:

elem.onclick = function( event ){
  alert(event.type + 'this.innerHTML');
};

Nach dem Login kopieren

a. Die traditionelle Bindungsmethode ist sehr einfach und stabil. Dies zeigt im Funktionskörper auch auf den Knoten, der das Ereignis verarbeitet (z. B. den Knoten, der derzeit den Ereignishandler ausführt).

b. Ein Event-Handler eines Elements kann nur eine Funktion registrieren, wenn er wiederholt registriert wird. Darüber hinaus wird die herkömmliche Bindungsmethode nur im Event-Bubbling ausgeführt.

2. W3C-Standardbindungsmethode:

var elem = document.getElementById('ID');
elem.addEventListener('click' ,
  function( event ){ 
   alert(event.type + ' ' + this.innerHTML + 1); 
  } , 
  false //冒泡阶段执行
);
elem.addEventListener('click' ,
  function( event ){ 
   alert(event.type + ' ' + this.innerHTML + 2); 
  } ,
  false
);

Nach dem Login kopieren

a. Diese Bindungsmethode unterstützt sowohl die Erfassungs- als auch die Bubbling-Phase der Zeitverarbeitung; sie kann für denselben Ereignishandler desselben Elements registriert werden;

b. Der beliebte IE-Browser unterstützt diese Registrierungsmethode jedoch nicht.

3. IE-Ereignishandler-Registrierungsmethode:

var elem = document.getElementById('a');
elem.attachEvent('onclick' ,
  function(){ 
   alert(window.event.srcElement.innerHTML + ' ' + this.innerHTML + 1); 
  } 
);
elem.attachEvent('onclick' ,
  function(){ 
   alert(window.event.srcElement.innerHTML + ' ' + this.innerHTML + 2); 
  }
);

Nach dem Login kopieren

a. Diese Bindungsmethode kann dasselbe Ereignishandle mehrmals registrieren.

b. Das Ereignismodell des IE unterstützt keine Ereigniserfassung. Dies zeigt im Hauptteil der Abhörfunktion nicht auf das aktuelle Element, und window.event.srcElement zeigt auf den Knoten, auf dem das Ereignis auftritt, und nicht auf den aktuellen Knoten IE-Ereignis Es gibt keine entsprechende DOM-currentTarget-Eigenschaft im Objekt.

4. Browserübergreifende Methode eins:

function addEvent(element, type, handler) {
  if (!handler.$$guid) handler.$$guid = addEvent.guid++;
  if (!element.events) element.events = {};
  var handlers = element.events[type];
  if (!handlers) {
  handlers = element.events[type] = {};
  if (element["on" + type]) {
   handlers[0] = element["on" + type];
  }
  }
  handlers[handler.$$guid] = handler;
  element["on" + type] = handleEvent;
};
addEvent.guid = 1;
function removeEvent(element, type, handler) {
  if (element.events && element.events[type]) {
  delete element.events[type][handler.$$guid];
  }
};
function handleEvent(event) {
  var returnValue = true;
  event = event || fixEvent(window.event);
  var handlers = this.events[event.type];
  for (var i in handlers) {
  this.$$handleEvent = handlers[i];
  if (this.$$handleEvent(event) === false) {
   returnValue = false;
  }
  }
  return returnValue;
};
function fixEvent(event) {
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
};
fixEvent.preventDefault = function() {
  this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
};

Nach dem Login kopieren

5. Browserübergreifende Methode zwei:

function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
  obj['e'+type+fn] = fn;
  obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
  obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
  obj.addEventListener( type, fn, false );
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
  obj.detachEvent( 'on'+type, obj[type+fn] );
  obj[type+fn] = null;
  } else
  obj.removeEventListener( type, fn, false );
}

Nach dem Login kopieren

Ich hoffe, dass dieser Artikel für alle hilfreich ist, die sich mit der JavaScript-Programmierung befassen.

Verwandte Etiketten:
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