ul
のチェックボックスがあり、ユーザーがli
要素のどこかをクリックして対応するチェックボックスをオン/オフにしてから、javascriptを使用してページに変更を適用できるようにしたい。すべてのチェックボックスがチェックアウトされていることに注意してください。これはいくつかの要素を除いたレイアウトですli
要素。DOM要素のプロパティがセレクタによって異なる - 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>
私は、チェックボックスのchecked
プロパティに基づいて、ページを変更するためにJavaScriptを使用してみてください。しかし、要素をどのように選択するかによって異なる値が得られます。私の機能はこのようになります
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') + " ", "");
}
}
};
カップルノート。第1に、形状は排他的である(すなわち、その形状を有するならばそれを示さない)ので、わずかに異なる論理であるが、色は包括的である(すなわち、その色を有するならばそれを示す)。第二に、.prop()
機能は、私はそれゆえ、私はこのようにそれを呼び出すif (!$(checkbox).prop('checked'))
を期待していたものの反対の値を返していました、それは本当
$('.filter-link').click(function(e) {
setFilter($(this).children("input")[0]);
});
を出力しますが、私はこのようにそれを呼び出すときに、それが出力します偽
$('.cat-check').click(function(e) {
setFilter($(this)[0]);
});
私はJSFiddle(https://jsfiddle.net/eg9c4vkv/6/)で効果を再現してみましたが、効果を複製することができませんでした。私はまた、console.log(How can I change the default behavior of console.log? (*Error console in safari, no add-on*))に関連するかもしれないと思ったが、理論的には、入力が同じである限り、関数は同じように動作するはずである。誰にもアイデアはありますか?
'setFilter'関数を見ないと言うことは難しいです。 jsFiddleと同じ方法でプロパティにアクセスしていますか? – Kevin
'setFilter'メソッドの本体に追加しました – cfatt10