jQuery Uniform Checkbox (de)checkt nicht

Lesezeit: 4 Minuten

Benutzer-Avatar
nderjung

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

Benutzer-Avatar
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:

$('#checkbox').prop('checked',true);
$.uniform.update();

Bearbeiten

Wenn Sie die aktualisieren möchten #checkbox nur:

$('#checkbox').prop('checked',true);
$.uniform.update('#checkbox');

Mach einfach das:

$('#checkbox').prop('checked',true).uniform('refresh');

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.

$('#myDiv input[type=checkbox]').attr('checked',true);
$('#myDiv input[type=checkbox]').parent().addClass('checked');

oder

$('#myDiv input[type=checkbox]').attr('checked',false);
$('#myDiv input[type=checkbox]').parent().removeClass('checked');

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 😉

Siehe auch: https://github.com/pixelmatrix/uniform/pull/167die versucht, das Problem mit besserer Abwärtskompatibilität zu beheben.

Benutzer-Avatar
Danni

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.

Benutzer-Avatar
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 🙂

    – Mads Ohm Larsen

    10. Juli 2011 um 18:23 Uhr

1204530cookie-checkjQuery Uniform Checkbox (de)checkt nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy