2012-05-17 12 views
5

Ich bin dabei, meinen Code zu aktualisieren, um addEventListener() zu verwenden, anstatt einfach nur die Element-Eigenschaft in Javascript zu schreiben.Wie aktualisiere ich auf addEventListener?

Bevor ich das mache, wollte ich ein paar Dinge überprüfen.

1.) Ich nehme an, dass ich removeEventListener() nicht aufrufen muss, wenn ich das DOM aktualisiere und die Elemente entferne (durch .innerHTML write).

2.) addEventListener wird auf den populären modernen Browsern unterstützt - IE9, Chrome, Firefox, Safari

3.) Es gibt keine anderen Probleme, die auf modernen Browsern arrise könnten.

Ich frage b.c. Ich möchte nicht die Waffe bei der Aktualisierung meines Codes springen.

Hinweise:

Eigenschaft Ereigniskorrelationen (Entfernen der auf).

  • onkeypress - keypress
  • onblur -> Unschärfe
  • onfocus -> Fokus

Forschung

https://developer.mozilla.org/en/DOM/element.addEventListener (Hat Kompatibilitätstabelle)

http://www.quirksmode.org/js/events_advanced.html

Verwandte

JavaScript listener, "keypress" doesn't detect backspace?

Hinweise

  • Statt falsch zurückzukehren. Verwenden Sie preventDefault(), um zu verhindern, dass Formulare bei der Eingabe gesendet werden.
+0

Ihre Annahmen sind korrekt ... gehen Sie dafür ... BTW, speichern Sie eine Kopie der aktuellen Datei, falls Sie nicht sind! –

+0

Okay .... wenn es irgendwelche Probleme gibt ... werde ich sie hier veröffentlichen. –

+0

@ CS_2013 Für 'addEventListener' ist es Tastendruck. Vielleicht möchten Sie auch jQuery verwenden, um Dinge browserübergreifend zu machen. Unter der Haube verwendet es 'addEventListener', wenn möglich, kann auf 'attachEvent' für ältere IE zurückgreifen und normalisiert auch Ihr Event-Objekt, so dass Sie sich keine Gedanken über Unterschiede machen müssen. – kapa

Antwort

3
  1. Sie nicht haben. Wenn Sie keine Verweise auf das DOM-Element speichern (z. B. in zufälligen globalen Variablen), sollte der Garbage Collector es bereinigen.

  2. Das ist die Browserunterstützung. Für ältere IE gibt es attachEvent(), was fast das gleiche tut.

  3. Nichts, worüber Sie sich Sorgen machen sollten. Dies ist der moderne Weg zu gehen.

Hinweis: möchten Sie vielleicht jQuery verwenden, um Dinge Cross-Browser zu machen. Unter der Haube verwendet es addEventListener wenn möglich, kann auf attachEvent für ältere IE und auch normalizes your event object fallen, so dass Sie nicht über Unterschiede sorgen müssen. Es ist auch großartig für DOM Manipulation und Traversal.

+0

Ich benutze keine Globals ... also bin ich gut dort. –

4

1) Sie brauchen nicht removeEventListener für diese Angelegenheit zu nennen, aber Sie rufen müssen removeEventListener wenn Sie das DOM-Element mit dem über addEventListener eventlistener angebracht entfernen, wenn Sie irgendeine seiner Kinder, die Sie don entfernen Ich muss nichts entfernen.

2) addEventListener ist auf allen gängigen Browsern unterstützt

3) Es gibt keine anderen Probleme auf modernes addEventListener

4) zugehöriges Browser onkeypress ein Ereignis nicht der Name, sondern ein Attribut, das Ereignis Name ist Tastendruck.Das Gleiche gilt für andere Namen auf * gleich

Ein kurzer Code jQuery für Cross-Browser-Kompatibilität zu vermeiden:

Element.prototype.on = function(evt, fn) { 
if (this.addEventListener) 
    this.addEventListener(evt, fn, false); 
else if (this.attachEvent) 
    this.attachEvent('on' + evt, fn); 
}; 

Element.prototype.off = function(evt, fn) { 
    if (this.removeEventListener) 
     this.removeEventListener(evt, fn, false); 
    else if (this.detachEvent) 
     this.detachEvent('on' + evt, fn); 
}; 
+0

netter sauberer Code ... sollte ich ältere Browser unterstützen, werde ich das ... –

Verwandte Themen