私はこのバグを修正する良い方法を見つけることができません。正方形のチェックを外し、赤いチェックを外し、赤を再確認したら、赤い四角形が戻ってきます。ユーザーが色のチェックを外して色を確認したときに、チェックされていない図形を追加しないようにするにはどうすればよいですか?私のjqueryチェックボックスのバグ
私の実際の仕事の例は、より多くのチェックボックスと100倍多くのデータを持っています。 JSFiddleはバグをはっきりと示しています。
ありがとうございました!それを見つけた
私はこのバグを修正する良い方法を見つけることができません。正方形のチェックを外し、赤いチェックを外し、赤を再確認したら、赤い四角形が戻ってきます。ユーザーが色のチェックを外して色を確認したときに、チェックされていない図形を追加しないようにするにはどうすればよいですか?私のjqueryチェックボックスのバグ
私の実際の仕事の例は、より多くのチェックボックスと100倍多くのデータを持っています。 JSFiddleはバグをはっきりと示しています。
ありがとうございました!それを見つけた
この1つは私の狂人を運転していました。このような単純な問題のように思えますが、私は非常に簡単な解決策を考え出すことができませんでした。とにかく、見て、これがあなたのために働くかどうか見てください。私はあなたの現在のコードよりも簡単だと思いますが、一見するとそうは考えていないかもしれません。複数のプロパティをサポートできるという利点があります。たとえば、hasBorderのような3番目のフィルタ項目を追加した場合、それは引き続き機能します。チェックボックス
$('input').change(function() {
var value = $(this).val();
//checkbox is checked
if ($(this).is(':checked')) {
var targets = $('.filterThis li')
//filter on class
.filter(function() {
if ($(this).hasClass(value)) return true;
})
//filter on other checkbox states
.filter(function() {
var classList = $(this).attr('class').split(/\s+/);
var index = classList.indexOf(value);
if (index !== -1) {
classList.splice(index, 1);
}
var include = true;
$.each(classList, function(index, item){
if ($('input[value="'+item+'"]').not(':checked').length) {
include = false;
return false;
}
});
return include;
});
//show list items
targets.show();
}
else {
//hide list items
$('.filterThis li').filter(function() {
if ($(this).hasClass(value)) return true;
}).hide();
}
});
。理由:この
$.each($tmp, function(i, val4) {
if ($(this).is(":checked")) { // problem is here
if ($('.' + val4 + '').is(":visible") == true) {
Updateへ
$.each($tmp, function(i, val4) {
if ($this.is(":checked")) { // problem is here
if ($('.' + val4 + '').is(":visible") == true) {
を変更:それはこのラインででしたか?
あなたは$ thisと$(これ)を混同していました。関数の早い段階で$ thisを定義し、ユーザーがクリックしたチェックボックスを指します。しかし、あなたの$ .each関数では、checkArrayのチェックボックスがチェックされているかどうかをチェックする必要があります。これを行うには、クリックされたチェックボックスではなく、checkArrayの項目を参照する必要があります。
cool!これはチェックボックスの問題を修正しますが、間違ったデータを表示します。私たちが四角形のチェックを外したにもかかわらず、「赤い四角形」がどのように戻ってくるか注目してください – user584583
これは、$ targetsを選択する方法によるものです。 「赤」が入っているすべてのLI要素を選択しています。それで、LIクラス= "赤い四角形"をキャッチします。 var $ targets = $ itemsToFilter.children( "li。" + $ this.val())を呼び出すと、 $ this.is( ":checked")? $ targets.show():$ targets.hide(); - あなたは、クラスに "赤"を持つすべてのLI要素を表示しています。これが赤い四角形を示す理由です。 – danludwig
あなたの言っていることが分かります。これが私がする必要があるように見えます。 //チェックしていない子を持つターゲットを削除するには、ターゲットを通過してADD CODEを実行する必要があります。 'var $ targets = $ itemsToFilter.children(" li。 "+ $ this.val()); $ this.is( ":checked")? $ targets.show():$ targets.hide(); ' – user584583
が、私はそれをやってみると思った、私は働くここに新しいバージョンを思い付きました。
私の回答を大きな更新で編集しました。どうぞご覧ください。 – mrtsherman