Bücher online kostenlos Kostenlos Online Lesen
JQuery Kochbuch (German Edition)

JQuery Kochbuch (German Edition)

Titel: JQuery Kochbuch (German Edition) Kostenlos Bücher Online Lesen
Autoren: jQuery Community Experts
Vom Netzwerk:
nämlich
document.getElementById
. Somit ist es ziemlich schnell, kann aber nur nach
id
s suchen.
    Skripte positionieren
    Das ganze Konzept rund um »document-ready« bezieht sich auf die Situation »wenn der HTML-Code geparst ist«, also wenn der Browser das schließende body-Tag

erreicht hat.
    Mit anderen Worten – anstatt
document.ready
zu verwenden, könnten Sie auch einfach Ihre Skripten direkt vor

platzieren.
    Das gleiche Prinzip können Sie auch auf andere Teile des DOM anwenden. Fügen Sie direkt hinter dem Element, auf das Sie zugreifen wollen, ein



    

Uhrzeit:  


    
    


    Wie Sie sehen, war hier gar kein Polling notwendig. Diese Lösung ist dann sehr gut nutzbar, wenn Sie sie nicht überall verwenden, da Sie ansonsten auf der Seite Berge von Skripten unterbringen.

Die Ausführungsschleife für Handler stoppen
    Problem
    Sie haben eine ganze Reihe von Handlern, die an die gleiche Kombination aus Element und Event gebunden sind.
    Nun wollen Sie innerhalb eines Handlers dafür sorgen, dass die restlichen Handler nicht mehr ausgeführt werden – so ähnlich wie bei
event.stopPropagation()
. [ 7 ] Das Problem ist, dass
event.stopPropagation()
nur bei Elementen funktioniert, die sich in der DOM-Hierarchie unterhalb des aktuellen Elements befinden.
    Lösung
    Seit jQuery 1.3 besitzen Event-Objekte, die an Handler übergeben werden, eine neue Methode namens
stopImmediatePropagation()
. [ 8 ] Diese Methode macht genau das, was ihr Name besagt, so dass keine folgenden Eventhandler über das aktuelle Event benachrichtigt werden. Zudem wird die Event Propagation ebenfalls gestoppt – wie bei
stopPropagation()
.
    Diese Methode wurde aus den Spezifikationen der ECMAScript DOM Level 3 Events übernommen. [ 9 ]
    Wollen Sie auf das Event-Objekt zugreifen, um zu wissen, ob diese Methode aufgerufen wurde, dann können Sie
event.isImmediatePropagationStopped()
nutzen, [ 10 ] die entweder
true
oder
false
zurückgibt.
    Diskussion
    Beispiele
    Einfaches Überprüfen einer Form
    stopImmediatePropagation()
kann das Abschicken einer Form verhindern, wenn eine bestimmte Prüfung nicht erfolgreich war:
jQuery('form')
    .submit(function(e){
     e.preventDefault(); // Nicht wirklich abschicken
     if( jQuery('#field').val() == '' ) e.stopImmediatePropagation(); })
    .submit(function(e){
     // Nur ausführen, wenn die Funktion vorher
     // nicht e.stopImmediatePropagation aufgerufen hat
    });
    Alle Events stoppen
    Es kann auch nützlich sein, Elemente zwischenzeitlich zu deaktivieren oder Container zu blockieren:
(function($){

function checkEnabled(e){
    if( jQuery(this).is('.disabled') ){ e.stopImmediatePropagation(); // Alle Handler stoppen
     e.preventDefault();
    }
};

jQuery.fn.buttonize = function(){
    return this.css('cursor','pointer')
     .bind('click mousedown mouseup',checkEnabled};
};

})(jQuery);
    Nachteile dieses Vorgehens
    Dieses neue Feature kann zwar in manchen Situationen die einzige Lösung sein, aber Sie dürfen nicht davon ausgehen, dass Sie Ihre Logik zuverlässig darauf aufbauen können. Wenn Sie sich auf dieses Feature verlassen, gehen Sie auch davon aus, dass die Handler in der erwarteten Reihenfolge ausgeführt werden und sich keine anderen Handler dazwischenschummeln.
    Events, die mit jQuery gebunden werden, werden zwar auch in der Reihenfolge ausgeführt, in der man sie hinzugefügt hat, aber die API kann das nicht immer hunderprozentig sicherstellen. Bei manchen Browsern oder in bestimmten Situationen kann es auch schiefgehen. Es ist zudem möglich, dass sich Bindings aus verschiedenen Pluginsins Gehege kommen, weil das eine
stopImmediatePropagation()
aufruft und das andere Plugin dann nicht mehr zum Zuge kommt. Das kann zu unerwarteten Problemen führen, die sich nur mit großem Aufwand debuggen lassen.
    Zögern Sie also nicht,
stopImmediatePropagation()
zu verwenden, wenn das für Ihr Problem genau das Richtige ist, aber seien Sie vorsichtig und prüfen Sie alle beteiligten Handler lieber doppelt.
    In folgenden Situationen sollten Sie die Verwendung noch einmal überdenken:
    Der Listener ist ein »beliebtes« DOM-Element, das auch von

Weitere Kostenlose Bücher