2011-05-19 24 views
0

我使用jQuery構建了一個簡單的列表過濾器。我有一些類別div #filter和div #itemlist中的一些項目。通過點擊一個項目(超鏈接),頁面的內容通過.load加載到下面的div #content。當選擇一個類別時,不屬於這個類別的項目會得到一個「不活躍」類別,並呈灰色。通過jQuery禁用href和.click

現在,灰色的物品應該是不可點擊的

我已經嘗試過不同的方法,但似乎沒有爲我工作。

  • 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調用需要被禁用/啓用,以及:

$.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; 
}); 

感謝您的幫助!

+0

它將如果你能投入到對[的jsfiddle]測試用例這是極大的讚賞(http://jsfiddle.net) – mekwall 2011-05-19 10:21:27

回答

2

後你的代碼看一眼我認爲這將是足以做到以下幾點:

$('#itemlist a').click(function() { 
    if ($(this).hasClass("notactive")) { 
     return false; 
    } 

    // The rest of your code 
    ... 
}); 
+0

啊,是的,謝謝你,有時候,我只是沒有看到它:) – Christoph 2011-05-19 10:34:56

0

我希望我得到你的意思,但不會檢查的notactive類做你的工作?

$("#itemlist a").click(function(e){ 
e. preventDefault(); 
if(!$(this).hasClass('notactive')) { 
    var $itemlink = $(this).attr("href"); 
    $("#content").html('<p><img src="ajax-loader.gif" /></p>'); 
    $("#content").load(""+$itemlink+" #content > *"); 
} 
return false; 
});