jQuery を使用して単純なリスト フィルターを作成しています。div にいくつかのカテゴリがあり、 div#filter
にいくつかのアイテムがあり#itemlist
ます。項目 (ハイパーリンク) をクリックすると、ページのコンテンツが .load を介して下の div に読み込まれ#content
ます。カテゴリが選択されると、このカテゴリにないアイテムは「非アクティブ」クラスになり、グレー表示されます。
これで、グレー表示されたアイテムはクリック不可になります。
さまざまなアプローチを試しましたが、どれもうまくいかないようです。
removeAttr('href')
.load 関数がまだコンテンツを取得しようとしているため、機能しません- と同じこと
preventDefault
- 試してみ
.bind('click', false);
ましたが、ページの読み込み時にアイテムはすべてクリック可能ですが、後でページをリロードせずに無効になるため、どこに配置すればよいかわかりません。
アイテムをフィルタリングするコードは次のとおりです。
$('#filter li a').click(function() {
// fetch the class of the clicked item
var ourClass = $(this).attr('class');
// reset the active class on all the buttons
$('#filter li').removeClass('current');
// update the active state on clicked button
$(this).parent().addClass('current');
if(ourClass == 'all') {
// show all items
$('#itemlist').children('li').removeClass('notactive');
}
else {
// hide all elements that don't share ourClass
$('#itemlist').children('li:not(.' + ourClass + ')').addClass('notactive');
// show all elements that do share ourClass
$('#itemlist').children('li.' + ourClass).removeClass('notactive');
}
return false;
});
また、無効/有効にする必要がある ajax-call も次のとおりです。
$.ajaxSetup({cache:false});
$("#itemlist a").click(function(){
var $itemlink = $(this).attr("href");
$("#content").html('<p><img src="ajax-loader.gif" /></p>');
$("#content").load(""+$itemlink+" #content > *");
return false;
});
助けてくれてありがとう!