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

Спасибо.

+0

Можете ли вы кодифицировать текст, используя кнопку кода? Делает приятнее читать :-) –

+0

Хе-хе, простите, я думал, что у меня есть. Теперь все код box'd! : D – Johnny

ответ

5

Вы можете попробовать добавить класс «активный», когда вкладка нажата (как правило, хорошая практика), затем с помощью JQuery-х live() сделать некоторые модные вещи ...

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

Я думаю, что делает трюк.

+0

О, спасибо, что отлично работает. Я такой новичок в jquery, мне приятно иногда помогать :) – Johnny

+0

Хе-хе, это то, что SO для ;-) – JorenB

0

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

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

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

+0

Не так ли? Я думал, что 'live()' обычно является лучшим решением при работе с несколькими элементами, поскольку он использует делегирование делегирования ... 'live()' только присоединяет одно событие, а привязка 'click()' к вкладкам x будет создавать x-события , Я прав? – JorenB