Отключите div, а затем привяжите его позже - PullRequest
2 голосов
/ 23 августа 2009
$('.tab').click(function() {
    $(this).unbind("click");
    var classy = $(this).attr("class").split(" ").splice(-1);
    var ihtml = $('.content.'+classy).html();
    $('#holder').html(ihtml);
    $('.tab').removeClass('highlight');
    $(this).addClass('highlight');
    $(this).unbind("click");
});

Так что в этом коде у меня в основном интерфейс с вкладками. Когда я снова нажимаю на вкладки, информация в #holder исчезает. Поэтому я хотел бы отсоединять клики, когда пользователь нажимает на вкладку, а затем связывать их, когда они переключают вкладки. Как я могу интегрировать это в мой код?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 23 августа 2009

Вы можете попробовать добавить класс 'active' при нажатии на вкладку (обычно это хорошая практика), а затем использовать jQuery's live(), чтобы сделать что-то необычное ...

$('.tab:not(.active)').live('click', function () { 
    $('.tab').removeClass('active');
    $(this).addClass('active');
    ... 
});

Полагаю, это помогает.

0 голосов
/ 23 августа 2009

также, вы можете попробовать использовать этот синтаксис (который должен быть быстрее и более дружественным к памяти и процессору):

$('.tab').click(function(){
 var t=$(this);
 if(t.hasClass('active')){return false;}
 $('.active').removeClass('active');
 t.addClass('active');
 /* do some stuff here */
 return false;
});

Или даже лучше, чтобы не повторяться:

$('.tab').click(function(){
 var t=$(this);
 if(!t.hasClass('active')){
 $('.active').removeClass('active');
 t.addClass('active');
 /* do some stuff here */
 }
 return false;
});

Почему это быстрее и дружелюбнее к процессору? Потому что вы связываете это только один раз. Когда вы используете live метод связывания, браузер будет прослушивать любые изменения в DOM.

...