Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung der Beispiele für JavaScript-Bindungsüberwachungsfunktionen für Ereignishandles_Javascript-Kenntnisse

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

WBOY
WBOYOriginal
2016-05-16 15:25:431062Durchsuche

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

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

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

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

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

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

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