2011-11-30 63 views
0

我一直无法解决我通过Stack搜索的问题。下面我有我的live()函数。你可以看到,当函数运行时,我想再次停止点击按钮,然后重新绑定。按钮死解除绑定,但它不会再次绑定...:S使用die()后重新绑定live()点击事件?

$('.control-left, .prevActive').live('click',function(){ 

    var firstSlide = $('.slider li:first-child'); 

    if(firstSlide.attr('class') != 'active'){ 
     $('.control-left, .prevActive').die('click'); 
     moveSlider('left'); 
     $('.control-left, .prevActive').live('click'); 
    } 

}); 
+1

如果你正在使用jQuery那么你应该使用['on()'](http://api.jquery.com/on/)来代替'live()'或'delegate()'。 –

+0

感谢您指出:) – Henryz

回答

3

无需解除绑定并重新绑定只使用一个标志:

var running = false; 
$('.control-left, .prevActive').live('click',function(){ 
    var firstSlide = $('.slider li:first-child'); 

    if(firstSlide.attr('class') != 'active' && !running){ 
     running = true; 
     moveSlider('left'); 
     running = false; 
    } 
}); 
+0

谢谢,这工作得很好!我看到我去哪里错了 - 真的很愚蠢的错误:) – Henryz

1

你的代码最后一行没有绑定任何的点击处理程序。你必须绑定功能

$('.control-left, .prevActive').live('click', function() { code here }); 

在你的情况,你可能会想要做这样的事情

var myspecialclickfunction = function(){ 

    var firstSlide = $('.slider li:first-child'); 

    if(firstSlide.attr('class') != 'active'){ 
     $('.control-left, .prevActive').die('click'); 
     moveSlider('left'); 
     $('.control-left, .prevActive').live('click', myspecialclickfunction); 
}; 

$(document).ready(function() { 
    $('.control-left, .prevActive').live('click',myspecialclickfunction); 
}); 

而且jQuery的1.42到你应该采用1.6X

+0

谢谢你的提示 – Henryz

1

您没有传递任何功能.live ..试试这个:

$('.control-left, .prevActive').live('click',function hello(){ 

    var firstSlide = $('.slider li:first-child'); 

    if(firstSlide.attr('class') != 'active'){ 
     $('.control-left, .prevActive').die('click'); 
     moveSlider('left'); 
     $('.control-left, .prevActive').live('click', hello); 
    } 

}); 
+0

这没有奏效,但谢谢你的回应:) – Henryz