2

脚本

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 中,当我双击时,我得到两个警报功能。(警报双击事件和单击事件)

我该如何修复它?

谢谢。

4

3 回答 3

3

将您的 clearTimeout 移到警报上方

clearTimeout(timer);
popupAc(id);

PS:我可能是错的,只是猜测,这里没有Firefox ..

于 2012-09-07T13:12:33.260 回答
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>
于 2014-03-24T11:18:26.210 回答
0

为了控制双击问题,我构建了这个函数,基本上是针对你想要防止用户点击太快、双击等的每个函数。你调用这个函数并定义函数释放的时间范围。这有助于避免 API 或端点调用毫无意义或重复,或在某些情况下滥用。

method_name参数只是您想要的任何标签,以防万一您想使用 console.log(runnning_methods); 检查被阻止的数组列表;

使用示例:

                  
    var runnning_methods={};
    function preventQuickMethod(method_name,callback,delay_time){
    		if(!delay_time){var delay_time=500;}
    		if(runnning_methods[method_name]==1){return;}
    		setTimeout(function(){ runnning_methods[method_name]=0; console.info(method_name+" released");},delay_time);
    		runnning_methods[method_name]=1;
    		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>

于 2015-09-19T21:41:46.023 回答