あるカテゴリのすべての製品を 1 ページにリストするストア用の単純な jQuery 製品フィルタをまとめようとしています。これは、ストアの設定方法により、AJAX では実現できません。
簡単に言えば、カテゴリのすべての製品が 1 つのページに表示されます。彼らは、さまざまなブランドの製品名とチーム名を持っています。マークアップは次のようになります (最後のフォームは、私がフィルターを実行しようとしている方法です)。
<div id="CategoryContent">
<ul>
<li class="product">Brand1 PRODUCT1 TeamA</li>
<li class="product">Brand1 PRODUCT2 TeamB</li>
<li class="product">Brand2 PRODUCT3 TeamB</li>
<li class="product">Brand2 PRODUCT4 TeamC</li>
<li class="product">Brand3 PRODUCT5 TeamA</li>
<li class="product">Brand3 PRODUCT6 TeamD</li>
<li class="product">Brand4 PRODUCT7 TeamD</li>
<li class="product">Brand1 PRODUCT8 TeamA</li>
<li class="product">Brand1 PRODUCT9 TeamA</li>
<li class="product">Brand1 PRODUCT10 TeamB</li>
<li class="product">Brand4 PRODUCT11 TeamD</li>
<li class="product">Brand2 PRODUCT12 TeamA</li>
</ul>
<div style="clear:both;"></div>
<div class="filter">
<form id= "brandfilter" action="">
<h2>Brands:</h2>
<input type="checkbox" name="brand" value="Brand1"/>Brand1 </br>
<input type="checkbox" name="brand" value="Brand2"/>Brand2 </br>
<input type="checkbox" name="brand" value="Brand3"/>Brand3 </br>
<input type="checkbox" name="brand" value="Brand1"/>Brand4 </br>
</form>
<form id="teamfilter" action="">
<input type="checkbox" name="team" value="TeamA"/>TeamA </br>
<input type="checkbox" name="team" value="TeamB"/>TeamB </br>
<input type="checkbox" name="team" value="TeamC"/>TeamC </br>
<input type="checkbox" name="team" value="TeamD"/>TeamD </br>
</form>
このフィルターが思いどおりに機能することがわかりました。コンソールでは、hide を show に、Brand1 を Brand2、TeamA などに置き換えても問題なく動作します。
$("#CategoryContent li").not(
$("#CategoryContent li:contains(Brand1)")
).hide();
次のステップは、同様に機能する二重フィルターを取得することです。
$("#CategoryContent li").not(
$("#CategoryContent li:contains(Brand1):contains(TeamA)")
).hide();
これを機能させることに関する私の問題は2つあります。1 は、Brand1 / Team A を変数に置き換えています (したがって、formids)。
2 つ目は、チェックボックスがクリックされたときにスクリプトを実行しようとしています。いずれかがクリックされた場合、および両方がクリックされた場合に機能するはずです (つまり、上記のスクリプトでは、すべてを表示してから非表示にすることでリセットする必要があります)。
現在、それを開始するためにこのスクリプトを実行していますが、問題が発生しているため、フィルターを 1 つだけに戻しました。
$("input:checkbox[name='brand']").click(function() {
var brandfilter = $(this).val();
alert (brandfilter);
$("#CategoryContent li:contains(' + brandfilter + ')").parent().hide();
});
ポップアップするアラートは私が望むもの(つまりBrand1)ですが、その後の非表示機能は機能せずalert (brandfilter)
、コンソールに再び戻ると[object HTMLFormElement]
. それで、変数が正しく保存されていないと思いますか?
これは、単純な作業の基本的なスクリプトhttp://jsfiddle.net/7gYJc/です