2013-02-02 22 views
0

首先感謝您閱讀。
我有一個問題停止執行功能,我會盡力解釋我想要做什麼以及我如何去做。
例如,我在元素a or button上綁定了一些事件,並且我希望用戶不會再次單擊它,我的意思是他可以單擊它,但所有操作都不會被調用一段時間(比如說一秒)。停止執行JS中的委託函數

所以,這裏是一些例子:

在HTML

1st example 
<ul> 
    <li><a href="some url" class='button'>Click me</a></li> 
    <li><a href="some url" class='button'>Click me</a></li> 
    <li><a href="some url" class='button'>Click me</a></li> 
</ul> 

2nd example somewhere else: 
<section id='someid'> 
    some info 
    some articles - doesn't matter 
    <button class='button iLoadComments'>Load more comments</button> 
</section> 

在javascript:

$("ul").on("click","a.button",function(){ 
    ... here some code or ajax request, whatever 
    return false; 
}); 
$("section").on("click","iLoadComments",function(){ 
    ... some ajax request 
    return false; 
}) 

,我想,不允許執行它。 ,我想通過1個功能涵蓋所有代碼..

所以,我做了什麼:我在全球範圍定義的新事件偵聽器,並添加屬性disabled該元素

$("body").on("mousedown", ".button", function(e){ 
    var $this=$(this); 
    if ($this.attr("disabled")) { 
     var event = e || window.event; 
     if (event.stopPropagation) { 
       event.stopPropagation(); 
     } else { 
       event.cancelBubble = true; 
     } 
     event.preventDefault(); 
     setTimeout(function() { 
      $this.removeAttr("disabled"); 
     }, 1000); 
     return false; 
    }else{ 
     $this.attr("disabled", true); 

    } 
}); 

但問題delegeted功能執行任何方式((

能有人幫助請,豈不是更好的做法?或者方法來糾正呢?

+0

'了'元素沒有一個'disabled'屬性。 – cdmckay

回答

3
var click_enabled = true; 
$("body").on("click",".button",function(){ 
    if (click_enabled) { 
     click_enabled = false; 
     setTimeout(function() { 
      click_enabled = true; 
     }, 1000); 
    } 
    return false; 
}); 

$("ul").on("click","a.button",function(){ 
    if (!click_enabled) 
     return false; 
    //... here some code or ajax request, whatever 
}); 
$("section").on("click",".iLoadComments",function(){ 
    if (!click_enabled) 
     return false; 
    //... some ajax request 
}); 

http://jsfiddle.net/EAhK4/

+0

'flag'不是一個非常具有描述性的變量名稱。這是一個標誌,指示什麼?我認爲「啓用」會更合適。 – cdmckay

+0

實際上,它並不是真正聰明的方式..我想在全球範圍內做到這一點,我的意思是很多其他的元素和功能......並只在一個地方覆蓋它 –

+0

那麼你可能需要改寫你的問題.. – salexch

2

你可以使用.one代替.on。無線個是,你的處理器將只運行一次:

$("ul").one("click","a.button",function(){ 
    //... here some code or ajax request, whatever 
    return false; 
}); 
+0

我不認爲這會再次啓用鏈接。 – Jai

+0

是的,這不是一個解決方案,因爲我想停止它只是第二次,再次重新啓用 –

+0

嗯,你可以使用'setTimeout'在一秒鐘後再次與'.one'綁定。但不知道這將是多高效。也許selexch的答案是要走的路。 – bfavaretto