Отвяжите div, а затем привяжите его позже
Вопрос
$('.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.