取消绑定div然后再绑定它

时间:2009-08-23 15:38:37

标签: jquery bind unbind

$('.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 个答案:

答案 0 :(得分:5)

您可以尝试在单击选项卡时添加“活动”类(通常是很好的练习),然后使用jQuery的live()做一些奇特的东西......

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

我想这就是诀窍。

答案 1 :(得分:0)

另外,你可以尝试使用这种语法(它应该更快,更多的内存和友好的cpu):

$('.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友好?因为你只绑定一次。当您使用live绑定方法时,浏览器将侦听DOM中的任何更改。