ich benutze jQuery-Uniform um Eingaben/Auswahlen etc. zu stylen. Das Kontrollkästchen funktioniert jedoch nicht mehr. Ich bin appending Daten, die von einem Ajax-Aufruf gesendet werden. Sobald es geladen ist, verwende ich $.uniform.update("input:checkbox") um das neue html zu aktualisieren. Beim Versuch, die Eingabe (de)checken, funktioniert es nur einmal. Wenn ich es erneut (de)checken möchte, ändert sich überhaupt nichts.
Ich habe versucht, die zu ändern Einheitliches Javascript damit alle Aktionen (z. click, focus, blur etc) sind unter der .live Funktion. (dh. .live("click",). Das verhindert einfach, dass irgendetwas funktioniert.
Aktualisieren:
Ich habe das Uniform JS vollständig durchgelesen und ein Problem entdeckt:
if(!$(elem).attr("checked")){
//box was just unchecked, uncheck span
spanTag.removeClass(options.checkedClass);
}else{
//box was just checked, check span.
spanTag.addClass(options.checkedClass);
}
Das .attr("checked") Syntax schlägt fehl. Es wird immer false zurückgegeben. Wieso den? Ich weiß nicht. Außerdem wird das Original nicht aktualisiert input um entweder die zu entfernen checked Attribut oder zum Setzen des checked Attribut.
Ich habe die offizielle Website durchlaufen und festgestellt, dass die Kontrollkästcheneingabe nicht aktualisiert wird. Es ist also nicht nur ich xP
Ich habe ein bisschen gegoogelt und verschiedene Methoden gefunden, um zu überprüfen, ob ein Kontrollkästchen aktiviert ist, aber die folgenden Methoden schlagen fehl:
if ($(elem).attr("checked")) // The original.
if ($(elem).attr("checked") == true)
if ($(elem).is(":checked"))
if ($(elem).checked)
// and:
var check = $(elem).match(/checked=/);
if (check == null)
Worte der Anleitung werden sehr geschätzt~ :3
Mick
EINFACHE LÖSUNG
Das ist weil UniformJs erfordert, dass Sie Ihre Änderung an einheitlichen Elementen aktualisieren, wenn Sie Werte im Formular dynamisch ändern müssen:
Ich weiß, das ist vielleicht ein bisschen spät, aber hoffentlich hilft es jemandem. Ich musste dem einheitlichen Code ein paar Zeilen hinzufügen, damit er nach vorab aktivierten Kontrollkästchen suchen würde. Dieser Code beginnt bei mir in Zeile 262. Ich verwende die einheitliche Version 1.7.5. Die Zeilen zwischen den Notizen „Hinzugefügt von John“ habe ich hinzugefügt.
"click.uniform touchend.uniform": function(){
if(!$(elem).attr("checked")){
//box was just unchecked, uncheck span
spanTag.removeClass(options.checkedClass);
// Added by John to look for checkboxes with the attr "checked" that have been click to uncheck
}else if(!$(elem).is(':checked')){
spanTag.removeClass(options.checkedClass);
// end addition by john
}else{
//box was just checked, check span.
spanTag.addClass(options.checkedClass);
}
},
Dies funktioniert seit jQuery 1.6.4 nicht if(!$(elem).attr("checked")){ prüft nur, ob das Kontrollkästchen beim Laden der Seite aktiviert war. Dies ist ein anderes Verhalten als in früheren Versionen von jQuery. Verwenden prop Anstatt von attr um das festzustellen aktuell Status “geprüft”.
– Gewähren
19. Oktober 2011 um 3:43 Uhr
Ausgezeichnet John hat Alex’ Methode zum Ändern von .attr in .prop in meiner jquery.uniform.min-Datei ausprobiert, aber das Problem nicht behoben. Implementierte Ihre Lösung und fügte Grants-Änderungen hinzu und es funktionierte wunderbar. Danke Leute. Übrigens mit jQuery1.6.4.
– Schroff
19. Oktober 2011 um 18:12 Uhr
Es ist schon eine Weile her, aber ich hatte das gleiche Problem, aber ich habe es durch eine einfache Lösung gelöst.
Uniform fügt ein hinzu span über das Kontrollkästchen und gibt ihm die Klasse checked ob es aktiviert ist oder nicht, aber nur beim Laden der Seite. Wenn Sie das Kontrollkästchen aktivieren oder deaktivieren, während die Seite bereits geladen ist, wird es deaktiviert (oder aktiviert), aber da die span ist, wird es als nicht aktualisiert angezeigt, Sie müssen es manuell tun.
Ist vielleicht nicht die sauberste Lösung, funktioniert aber in jedem Browser.
jQuery 1.6.4 hat die Bedeutung von geändert attr() Funktion, die von jquery.uniform.js verwendet wird. attr() gibt jetzt den Status zurück, in dem sich das Attribut befand, als die Seite geladen wurde – nicht den Status des Attributs JETZT. Es wird eine Ersetzungsfunktion aufgerufen prop()was die Arbeit macht attr() gewohnt zu tun.
Um das Plugin zu reparieren, ersetzen Sie jedes Vorkommen von attr("checked") mit prop("checked"). Auch ändern attr("disabled") zu prop("disabled").
Das sollte Ihr Projekt reparieren. Bei mir hat es geklappt 😉
Ich glaube, die neueste Version von Jquery verwendet eine andere Methode, um einen :checked-Wert auszuwerten. Die Verwendung einer etwas älteren Version (wenn auch nicht ideal) hat dieses Problem für mich behoben. Das ist jedoch schon eine Weile her, und PixelMatrix scheint Uniform immer noch nicht aktualisiert zu haben.
Mads Ohm Larsen
Könntest du nicht sowas verwenden wie
$("#checkbox").attr("checked", "true");
um das Kontrollkästchen aktiviert zu machen, und
$("#checkbox").removeAttr("checked");
es zu deaktivieren?
Diese Methoden würden funktionieren, sobald eine Syntax festgestellt hat, ob das Element bereits überprüft wurde. Danke trotzdem 😀
– nderjung
9. Juli 2011 um 22:49 Uhr
Ahh, dann habe ich das Problem falsch verstanden 🙂