Вопрос

$('.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 исчезает.Итак, что я хотел бы сделать, это отменить привязку кликов всякий раз, когда пользователь нажимает на вкладку, а затем привязать ее при переключении вкладок.Как я могу интегрировать это в свой код?

Спасибо.

Это было полезно?

Решение

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

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

Я думаю, это делает свое дело.

Другие советы

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

$('.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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top