2012-03-29 4 views
1

Ich habe einige Beispiel

target = $this.attr('data-target') || e.preventDefault() || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') 

aber ich verstehe nicht, wie seine Werke (

Wenn ich console.log()

console.log(target, e.preventDefault(), (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 

ich haben

#collapseTwo undefined #collapseTwo 

Ja, ich verstehe, dass e.preventDefault() Ergebnis - "Müll" zurückgibt ... aber warum e.preventDefault() verwendet mit || Betreiber?

Wie funktioniert es?

Antwort

1

Dies geschieht Folgendes: Bei einigen Kommentaren vollständig unterscheidet sich die revisited Antwort (in gewissem Sinne :)) Also, was es tut, dass, wenn das Element geklickt Datatarget hat einen Wert (in diesem Fall, dass das Element angenommen wird, ist kein Anker mit navigatorischem Klickereignis zum Abbrechen) als dieser Wert für die Navigation verwendet wird, andernfalls muss das Element ein Anker sein, der zuerst abgebrochen werden muss, dann wird der Wert des href-Attributs verwendet.

knappe? :)

Mein ursprüngliches Lesen davon war: Wenn das Ereignisziel dataTarget-Attribut hat, wird die Click-Ereignis-Blase abgebrochen, und wenn das Click-Ziel ein href-Attribut angegeben hat, wird der Browser dort navigiert. Das Konzept besteht darin, dass die Bewertungslogik von links nach rechts mit der tatsächlichen Ausführung der seitenwirksamen Methode kombiniert wird.

Diese Art von Kettenschrift ist nicht wirklich vorteilhaft, wenn auch knapp. preventDefault ist da, weil auf diese Weise der Aufruf an ihn verkettet ist und kein Codeblock benötigt wird.

0

Die || Der Operator wertet den Ausdruck nicht rechts davon aus, wenn der Wert auf der linken Seite WAHR ist.

+0

ok, e.preventDefault() liefert nie Ergebnisse wahr, warum es in diesem Ausdruck verwendet? Schlechter Stil-Code? – Vitaliy

+0

Ja, in der Tat ist das der Grund, warum href dann überprüft, und wenn Data-Target einen Wert hat, bedeutet es, dass es nicht href haben, so dass es keine Notwendigkeit für die Stornierung gibt. Meine Güte. –