Alternative für jQuery attr () in IE?

8

Ok, korrigiere mich, wenn ich falsch liege, aber ich nehme an, dass jQuery attr() NICHT im IE funktioniert. ( markierter Wontfix ) Was ist die beste Alternative? Zum Beispiel funktioniert dies überall außer IE:

%Vor%

Update: Hoppla ... Ich verstehe das Problem. Ich hatte das tatsächlich in einer if -Anweisung basierend auf einer CSS3-Medienabfrage. Medienabfragen, die in IE8 oder niedriger nicht nativ unterstützt werden. Das attr() funktioniert definitiv!

    
ryanve 13.08.2011, 17:39
quelle

5 Antworten

7

Ich benutze attr mit data-* Attributen im IE die ganze Zeit, ich hatte noch nie ein Problem. Hier ist eine Live-Version , die gerade in IE6, IE7 und IE9 getestet wurde. Ich habe meine IE8-Box nicht zur Hand, aber ich hatte noch nie ein Problem.

    
T.J. Crowder 13.08.2011, 17:43
quelle
5

Ich hatte kein Problem mit attr() in IE arbeiten. Die Beschreibung des aufgeführten Fehlers lautet:

  

JQuery-Funktion .attr funktioniert nicht unter IE, wenn Attribut ein Ereignis ist   wie .attr ("onchange", "alert ('Hallo Ereignis onchange!')"); . Es ist   weil IE das nicht versteht. Sie können überprüfen, ob Attribut ist   Ereignis, make eval Funktion wenn IE.

Genauer gesagt, es hat mit events zu tun. Reguläre Attribute sollten kein Problem sein.

    
rossipedia 13.08.2011 17:48
quelle
4

Bitte versuchen Sie es:

$this.data('websrc'); anstelle von $this.attr('data-websrc');

    
thecodeparadox 13.08.2011 17:43
quelle
1

Ich hatte ein ähnliches Problem. Ich hatte einige Formulare, die ich einfach einstellen wollte, ob das Feld benötigt wurde oder nicht. Meine Formulareingabe sah folgendermaßen aus:

< input id="myid" name="myname" type="text" required="true" />

Es funktionierte großartig in allem außer IE9! Doh!

Das Problem ist, dass ich die neue Eigenschaft nicht mit jQuery setzen will, und ich möchte den Prototyp für Eingabeelemente nicht erweitern .... Ich will nur eine Lösung, die in allen Browsern ohne viel funktioniert zusätzlicher Code oder Verzweigung.

Ich habe die prop () - Methode von jQuery ausprobiert, aber sie musste erneut manuell gesetzt werden. Ich wollte etwas, das alle DOM-Elemente geladen und die Daten auf diese Weise extrahiert.

Ich habe festgestellt, dass die Methode jQuery attr () in allen Browsern mit Ausnahme von IE9 funktioniert hat. Nachdem ich eine Weile gestochen hatte, erkannte ich, dass das Attribut dort war, aber das Lesen wurde auf IE9 etwas anders gehandhabt.

Also habe ich die Werte auf diese Weise aufgerufen:

var val = $('#elementID').attr('required') || $('#elementID')[0].getAttribute('required');

Es ist nicht perfekt, aber es funktionierte großartig und ich musste nicht zurückgehen und meine Attribute mit "data" umbenennen oder nach dem geladenen DOM zuweisen.

Wäre es nicht großartig, wenn jQuery 1.6.x diese Änderung den Methoden attr () und prop () für uns hinzufügen würde!

Wenn jemand eine elegantere Lösung kennt, die das ATTRIBUTE NACH SEITENLAST NICHT EINSTELLEN MUSS, dann lassen Sie es mich wissen.

    
exoboy 16.11.2011 22:34
quelle
0

Es scheint, dass attr () im IE fehlschlägt, wenn Sie einen Attributnamen mit Groß- und Kleinschreibung verwenden. Achten Sie darauf, alle Kleinbuchstaben für Ihre Attributnamen zu verwenden.

    
cacheflowe 26.01.2012 04:13
quelle