jQueryはclickがダブルクリックして動的関数またはマルチパラメータを提出することを防止します。


今日はJQのダブルクリックイベントについて、複数回の提出を防ぐ問題を書いています。また、関数によって一括的に定義できます。また、関数名またはマルチパラメータなどを動的に伝達することができます。jQueryのイベントバインディングにおいてダブルクリックイベント(dblclick)を実行すると、イベント(click)を2回クリックすることができることを知っています。すなわち、タグ要素(divなど)が、クリックイベント(click)とダブルクリックイベント(dblclick)を同時に結びつけると、クリックイベント(click)を実行すると、ダブルクリックイベント(dblclick)をトリガしません。ダブルクリックイベント(dblclick)を実行すると、イベント(click)を2回クリックします。まずクリックしたイベントの実行順を見てください。クリックします。mousedown、mouseout、click。ダブルクリック(dblclick):mousewn、mouseout、click、mousedown、mouseout、click、dblclick;イベント(dblclick)をダブルクリックし、トリガされた2回のクリックイベント(click)では、最初のクリックイベント(click)がブロックされますが、2回目はできません。つまり、イベント(dblclick)をダブルクリックすると、イベント(click)の結果とダブルクリックの結果が戻ります。イベント(dblclick)の結果をダブルクリックするのではなく、イベント結果(click)を二回クリックします。このようにすれば、余計なクリックをなくすだけで、この問題は解決されます。効果は下図のようですhttp://images.cnitblog.com/i/554071/201404/010846579687197.png ソースコードは以下の通りです。
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>jQuery click </title>
<script type="text/javascript" src="http://www.86y.org/js/jquery.min.js"></script>
</head>

<body>
<div id="show"> :</div>
<div style="background:#f60;color:#fff;width:80px;padding:10px 20px;" id="div" onclick="ss1('DIV ')"> </div>

<input type="button" value=" " id="but1" onclick="ss2('INPUT ')"/>
<script language="javascript">

function std (obj,vs){
var TimeFn = null;
var funs=$(obj).attr("onclick");
$(obj).click(function() {
clearTimeout(TimeFn);
TimeFn = setTimeout(function(){
eval(funs);
clearTimeout(TimeFn);
}, 400);
});

$(obj).dblclick(function() {
clearTimeout(TimeFn);
});
$(obj).removeAttr("onclick");
}

var ss1=function(s){$("#show").html("DIV :"+s);alert("a");};//div
var ss2=function(s){$("#show").html("INPUT :"+s);alert("b");};//input

//
std("#div","div");
std("#but1","button1");
</script>
</body>
</html>