2012-09-07 114 views
2

腳本JavaScript雙擊事件?

var timer; 
var firing = false; 
var begen = function(id) { 
    alert('one click'); 
}; 

var popupAc = function(id) { 
    alert('double click'); 
}; 

function cc(id) { 
    if (firing) { 
     popupAc(id); 
     clearTimeout(timer); 
     firing = false; 
     return; 
    } 
    firing = true; 
    timer = setTimeout(function() { 
     begen(id); 
     clearTimeout(timer); 
     firing = false; 
    }, 250); 
}​ 

的Html

<div id="myID" onclick="cc()">Click Here</div>​ 

http://jsfiddle.net/LXSZj/11/

問題:

它與IE和Chrome工作正常,但在Firefox中,當我雙擊,我得到兩個警報功能。(提醒雙擊事件和一個點擊事件)

我該如何解決它?

謝謝。

+1

只是一個供參考:您沒有設置一個布爾定時器,你可以使用計時器對象本身。因此,而不是'if(firing)'你可以做'if(timer)'。 – epascarello

回答

3

移動你clearTimeout警報上述

clearTimeout(timer); 
popupAc(id); 

PS:我可能是錯的,只是猜測,沒有火狐在這裏..

+0

謝謝,你能解釋一下,爲什麼發生這種情況?我不明白。 –

+0

我想說第二個警報會排隊,因爲clearTimeout執行的太晚了(如果您沒有足夠快的速度來關閉第一個警報)。 –

+0

瞭解非常感謝。 –

0
<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
</script> 
<script> 
    var timer; 
    var x = false; 

    function myfun(){ 
    if(timer){ 
    clearTimeout(timer); 
    alert('double click'); 
    timer = 0; 
    return; 
    } 
    timer = setTimeout(function(){ 
        alert('singleclick'); 
        timer=0; 
        clearTimeout(timer);     

       },250) 

      } 
     </script> 
     </head> 
     <body> 

     <p>If you singleclick/double-click on me, I will alert.</p> 
      <p> i will also alert based on your click</p. 

     <script> 
     (function(){ 
    pelem = document.getElementsByTagName('p'); 

     for(var i=0;i<pelem.length;i++){ 
     pelem[i].addEventListener('click',myfun,false); 
    } 

    })() 
    </script> 

    </body> 
     </html> 
0

控制雙擊問題,我建這個功能,基本上針對每個功能你想防止用戶點擊太快,雙擊等等。你改用這個函數來定義發佈的時間範圍的功能。這是有用的,以避免API或端點調用無意義或重複或在某些情況下濫用。

METHOD_NAME參數就是你想要的任何標籤,以防萬一你想用的console.log(runnning_methods)檢查防止數組列表;

用例:

    
 
    var runnning_methods={}; 
 
    function preventQuickMethod(method_name,callback,delay_time){ 
 
    \t \t if(!delay_time){var delay_time=500;} 
 
    \t \t if(runnning_methods[method_name]==1){return;} 
 
    \t \t setTimeout(function(){ runnning_methods[method_name]=0; console.info(method_name+" released");},delay_time); 
 
    \t \t runnning_methods[method_name]=1; 
 
    \t \t callback(); 
 
    } 
 
     
 
     
 
     function nextpage(){ 
 
     preventQuickMethod("dismissSlot",function(){ 
 
      document.getElementById("btn").innerHTML="fired at "+Date.now(); 
 
     },1000); 
 
    } 
 
        
<button onclick="nextpage()">Fire!</button> 
 
<span id="btn" >EHHEHE</span>