So habe ich eine ul
von Kontrollkästchen und ich möchte Benutzern erlauben, irgendwo auf die li
Elemente klicken, um das entsprechende Kontrollkästchen zu aktivieren/deaktivieren, dann übernehmen Sie die Änderungen auf der Seite über Javascript . Beachten Sie, dass alle Kontrollkästchen aktiviert sind. Dies ist das Layout, abgesehen von ein paar weiteren li
Elementen.Eigenschaft von DOM-Element unterscheidet sich je nach Selektor - jQuery
<ul class="dropdown-menu">
<li class="cat-header">
<strong>Category</strong>
</li>
<li>
<a class="filter-link"> Red
<input checked="true" class="cat-check" data-filter="red" data-type="color" type="Checkbox">
</a>
</li>
Ich versuche dann Javascript, um die Seite auf der checked
Eigenschaft der Kontrollkästchen Basis zu verändern, zu verwenden. Allerdings erhalte ich unterschiedliche Werte, je nachdem, wie ich die Elemente auswähle. Meine Funktion sieht so aus
setFilter = function(checkbox) {
console.log(checkbox);
if ($(checkbox).attr('data-type') === "color") {
if (!$(checkbox).prop('checked')) {
$(checkbox).prop('checked', false);
colorFilter = colorFilter.replace($(checkbox).attr('data-filter') + " ", "");
} else {
$(checkbox).prop('checked', true);
colorFilter = colorFilter + $(checkbox).attr('data-filter') + " ";
}
} else if ($(checkbox).attr('data-type') === "shape") {
if (!$(checkbox).prop('checked')) {
$(checkbox).prop('checked', false);
shapeFilter = shapeFilter + $(checkbox).attr('data-filter') + " ";
} else {
$(checkbox).prop('checked', true);
shapeFilter = shapeFilter.replace($(checkbox).attr('data-filter') + " ", "");
}
}
};
Ein paar Notizen. Erstens ist die Farbe einschließlich (d. H. Zeige es, wenn sie diese Farbe hat), während die Form exklusiv ist (d. H., Zeige sie nicht, wenn sie diese Form hat), daher die etwas andere Logik. Zweitens .prop()
Funktion war es, die entgegengesetzte Werte zurückzukehren, was ich erwartet hatte damit die if (!$(checkbox).prop('checked'))
Wenn ich es so nennen, druckt es sich als wahr heraus
$('.filter-link').click(function(e) {
setFilter($(this).children("input")[0]);
});
aber wenn ich es so nennen, es ausdruckt falsch
$('.cat-check').click(function(e) {
setFilter($(this)[0]);
});
ich habe versucht, die Wirkung in JSFiddle (https://jsfiddle.net/eg9c4vkv/6/) konnte aber nicht duplizieren den Effekt zu reproduzieren. Ich dachte auch, dass es mit console.log (How can I change the default behavior of console.log? (*Error console in safari, no add-on*)) verwandt sein könnte, aber theoretisch sollte sich die Funktion genauso verhalten, solange die Eingabe die gleiche ist. Hat jemand irgendwelche Ideen?
Es ist schwer zu sagen, ohne mehr von 'setFilter' Funktion zu sehen. Greifen Sie auf die Eigenschaften genauso zu wie auf Ihre jsFiddle? – Kevin
Ich habe im Hauptteil der 'setFilter' Methode hinzugefügt – cfatt10