Die Methode jQuery attr kann Click-Handler und inneren Text setzen

8

Beim Lesen des jQueryUI-Dialogfeldcodes habe ich festgestellt, dass die jQuery .attr () -Methode ein undokumentiertes Verhalten aufweist:

%Vor%
  • Können Sie mir erklären, wie es funktioniert? Warum sollte ich true als zweites Argument festlegen? Karte von Attribut-Wert-Paaren?
  • Kann ich diese Funktion sicher in meinen Projekten verwenden?
ASergey 18.10.2012, 12:39
quelle

3 Antworten

3

Ich vermute etwas, weil ich mit der jQuery-Quelle nicht vertraut bin. jQuery.attr ruft jQuery.access auf und der Kommentar über der Funktion jQuery.access lautet:

%Vor%

Bei weiterer Untersuchung ruft die text() -Funktion auch jQuery.access :

auf %Vor%

Sie verwenden attr, um Text- und Event-Handler zu setzen, was aber nicht der richtige ist. Allerdings scheinen alle die gleiche Funktion zu verwenden, um die Aufgabe zu erledigen, so dass die Verwendung undokumentierter Parameter nur beiläufig das erwartete Verhalten ergibt.

Ich würde es als unzuverlässig ansehen, sich auf undokumentiertes Verhalten zu verlassen, um das zu erreichen, was Sie hier versuchen, da jedes zukünftige Upgrade von jQuery Ihren Code zerstören könnte.

    
bcoughlan 18.10.2012, 12:59
quelle
2

Wenn Sie den Code jQuery 1.8.2 betrachten, kommt der Parameter true schließlich in der Variablen pass in einer Zeile an, die besagt:

%Vor%

Wenn diese Option gesetzt ist, teilt jQuery mit, dass der Wert des Schlüssels geprüft werden soll. Wenn es sich um eine Funktion handelt, rufen Sie sie sofort auf. Daher wird click: function(...) diese Funktion aufrufen, nicht registrieren diese Funktion.

Dies scheint die Funktionsweise der .method(function() { ... } -Versionen verschiedener jQuery-Funktionen zu sein, dh diejenigen, die anstelle eines bestimmten Werts für eine Eigenschaft eine Funktion übergeben, die selbst den ursprünglichen Wert übergibt und deren Rückgabewert zugewiesen wird zu der entsprechenden Eigenschaft.

  

Kann ich diese Funktion in meinen Projekten sicher verwenden?

Ich würde nicht, bis es dokumentiert ist.

    
Alnitak 18.10.2012 13:00
quelle
0

Das ist ein interessanter Fall. Ich kann nicht so tun, als würde ich dir sagen / warum / es funktioniert, und ich denke, es könnte sogar ein Grund sein, dies als Fehlerbericht an jQuery zu senden, weil das Verhalten, das sie dokumentieren, nicht so herauskommt, wie ich es erwarten würde .

Auf dieser Seite erscheint das folgende Zitat nach unten: Ссылка

  

"Hinweis: Wenn in der Setter-Funktion (dh Funktion (index, attr) {}) nichts zurückgegeben wird oder wenn undefined zurückgegeben wird, wird der aktuelle Wert nicht geändert. Dies ist nützlich, um Werte nur dann selektiv festzulegen, wenn sie sicher sind Kriterien sind erfüllt. "

Das hat mich dazu gebracht, auf jsFiddle herumzuspielen: Ссылка

Beachten Sie, dass die Fälle 8 und 9 entgegen ihrer Dokumentation entweder null oder nichts zurückgeben. Wenn man sich anschaut, was Alnitak erwähnt hat, scheint es einen Sinn zu ergeben, da ihr Test / nur bestätigt, dass es eine Funktion ist oder nicht, was diese Funktion zurückgibt (.isFunction sollte immer nur wahr / falsch zurückgeben) Der zurückgegebene Wert ist wahr / falsch).

Am Ende würde ich jedoch sowohl Alnitak als auch bcoughlan zustimmen, dass dies keine Funktionalität ist, auf die Sie sich verlassen sollten, obwohl ich hinzufügen möchte, dass sie nicht stabil ist, da sie in zukünftigen Versionen von jQuery, es ist auch eine schlechte Praxis, sich auf Hacks zu verlassen, die auf undokumentierte Funktionen angewiesen sind, weil zukünftige Entwickler des Codes, den du heute schreibst (und der dich in 2-4 Monaten einschließt!), leicht vergessen könnten, dass es da ist, oder warum es ist setz dich auf diese Weise. Es ist viel besser, explizit zu sein und die Funktionalität so zu nutzen, wie sie dokumentiert ist, damit Sie sich selbst und anderen klar machen, was Ihr Code tun soll.

    
Jason M. Batchelor 18.10.2012 13:19
quelle