Отключить href и .click через jQuery - PullRequest
0 голосов
/ 19 мая 2011

Я создаю простой фильтр списка, используя jQuery.У меня есть несколько категорий в div #filter и некоторые элементы в div #itemlist.При нажатии на элемент (гиперссылка) содержимое страницы загружается через .load в div #content ниже.Когда категория выбрана, предметы, не входящие в эту категорию, приобретают класс notactive и выделяются серым цветом.

Теперь, неактивные элементы, выделенные серым цветом, должны быть недоступны для клика .

Я пробовал разные подходы, но ни один из них мне не помог.

  • 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;
});

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

После быстрого взгляда на ваш код я думаю, что будет достаточно сделать следующее:

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

    // The rest of your code
    ...
});
0 голосов
/ 19 мая 2011

Надеюсь, я понимаю, что вы имеете в виду, но разве проверка на нотационный класс не сделает вашу работу?

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