2015-06-03 57 views
2

如何使此功能可以被取消?現在,它只在頁面重新加載後重新運行。我希望它一直工作。顯然,我沒有使用unbind的權利。如何重新運行功能?

<script> 
     $(document).ready(function() { 

      $('.viewAll').bind("click.myEvent", function(){ 
       $('.mobileNavBtn, #shopNavTabBtn, #sec0').click(); 
       $(this).unbind("click.myEvent"); 
       $('html, body').animate({ 
        scrollTop: $("#sec0").offset().top 
       }, 2000); 
       return false; 
      }); 
     }) 
    </script> 

這是我原來的功能:

<script> 
     $(document).ready(function() { 

      $('.viewAll').on('click', function(){ 
       $('.mobileNavBtn, #shopNavTabBtn, #sec0').click(); 
       $('html, body').animate({ 
        scrollTop: $("#sec0").offset().top 
       }, 2000); 
       return false; 
      }); 
     }) 
    </script> 
+0

首先,不是'bind'使用'.on()'。其次,你爲什麼不移除'unbind'。這應該是可以調用的。 – Dhiraj

+0

我原來的函數確實有.on()。我的功能是可調用的,但我需要它是可重複的。 {當有人再次點擊時,我希望重新運行該功能} – newneub

+0

您正在綁定單擊事件上的特定功能。它只會在點擊發生時執行。說了這些,你想要在頁面加載和點擊事件上執行這個? – andybeli

回答

0

$(this).unbind("click.myEvent");這裏您解除綁定事件偵聽器。這樣做的結果是你的事件只發射一次(因爲它會在第一次觸發後停止收聽)。

在jQuery中實現該功能的更好的更乾淨的方法是使用jQuery one method附加事件處理程序。另一方面,如果您試圖在動畫未運行時僅偵聽元素,則可以附加事件偵聽器,並在動畫開始時將其刪除。動畫後重新附加事件。你提供的例子看起來像這樣:

$('.viewAll').on('click', viewAllClick); 
function viewAllClick(evt) { 
    $('.mobileNavBtn, #shopNavTabBtn, #sec0').click(); 
    //detach this event 
    $('.viewAll').off('click', viewAllClick); 

    $('body').animate({ 
     scrollTop: $("#sec0").offset().top, 
    }, { 
     done: function() { 
      //reattach the event 
      $('.viewAll').on('click', viewAllClick); 
     }, 
     duration: 2000 
    }); 
} 

我會仔細檢查你的動畫調用,以確保它正在做你真正想要的。

請參閱plunker for a similar example。單擊文本並觀察動畫僅在動畫重新附加後記錄,而每次單擊文本時點擊都會觸發。