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 では、ダブルクリックすると 2 つのアラート機能 (アラート ダブルクリック イベントとワンクリック イベント) が表示されます。

どうすれば修正できますか?

ありがとう。

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 に答える