2011-11-30 35 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