Sollen alle jquery-Ereignisse an $ (Dokument) gebunden sein?

Wo das kommt von

Als ich zuerst gelernt, jQuery, ich normalerweise an Veranstaltungen wie dieser:

$('.my-widget a').click(function() {
    $(this).toggleClass('active');
});

Nachdem das lernen mehr über Wahlschalter Geschwindigkeit und event-delegation, ich Las an mehreren stellen, dass "jQuery event delegation wird Ihren code schneller." So fing ich an, schreiben Sie code wie diesen:

$('.my-widget').on('click','a',function() {
    $(this).toggleClass('active');
});

War dies auch die empfohlene Art und Weise zu replizieren, die das Verhalten der veraltet .live () - Ereignis. Was ist wichtig für mich, da viele meiner Seiten dynamisch hinzufügen/entfernen-widgets die ganze Zeit. Die oben nicht Verhalten sich genau wie .live (), aber, da nur Elemente Hinzugefügt, um die bereits vorhandenen container '.my-widget " bekommen Sie das Verhalten. Wenn ich dynamisch hinzufügen, ein weiterer block von html nach, der code lief, diese Elemente werden nicht die Ereignisse an Sie gebunden. Wie diese:

setTimeout(function() {
    $('body').append('<div class="my-widget"><a>Click does nothing</a></div>');
}, 1000);

Was ich erreichen will:

  1. das alte Verhalten .live() //Bedeutung der Befestigung Ereignisse, um noch nicht vorhandene Elemente
  2. die Vorteile der .auf()
  3. Schnellste Leistung, die es zu binden, Veranstaltungen
  4. Einfache Weise zu verwalten, Veranstaltungen

Ich nun fügen Sie alle Ereignisse wie dieses:

$(document).on('click.my-widget-namespace', '.my-widget a', function() {
    $(this).toggleClass('active');
});

Scheint, erfüllt alle meine Ziele. (Ja, es ist langsamer als IE aus irgendeinem Grund, keine Ahnung warum?)
Es ist schnell, weil nur ein einzelnes Ereignis gebunden wird zu einem einzigartigen element und dem Sekundär-Selektor wird nur ausgewertet, wenn das Ereignis Eintritt (bitte korrigieren Sie mich, wenn dies hier falsch). Der namespace ist genial, denn es macht es leichter zu wechseln wird der Ereignis-listener.

Meine Lösung/Frage

So, ich bin angefangen zu denken, dass jQuery events sollte immer gebunden sein an $(document).

Gibt es einen Grund, warum Sie würde nicht wollen, dies zu tun?

Konnte dies sein, als ein best practice? Wenn nicht, warum?

Wenn Sie gelesen haben, diese ganze Sache, danke. Ich freue mich über jede/feedback/Erkenntnisse.

Annahmen:

  1. Mit Hilfe von jQuery unterstützt .on() //mindestens version 1.7
  2. Sie möchten der das Ereignis Hinzugefügt werden, um dynamisch neue Inhalte Hinzugefügt

Lesungen/Beispiele:

  1. http://24ways.org/2011/your-jquery-now-with-less-suck
  2. http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery
  3. http://www.jasonbuckboyer.com/playground/speed/speed.html
  4. http://api.jquery.com/on/

InformationsquelleAutor der Frage Buck | 2012-10-10

Schreibe einen Kommentar