雙擊和單擊事件沖突解決方法:
關於單擊事件和雙擊事件,如果單獨拿出來都是非常簡單,這里也就不多介紹了,具體可以參閱jQuery的click事件和jQuery的dblclick事件一章節,但是如果同一個元素同時綁定了單擊事件和雙擊事件,那么就會造成沖突現象,比如我們雙擊此元素指向觸發雙擊事件,但是也完全滿足單擊事件的條件,不但雙擊事件觸發了,單擊事件同樣也會被觸發,下面就通過代碼實例介紹一下如何解決它們的沖突問題,代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
var timer=null;
$("#bt").bind("click",function(){
clearTimeout(timer);
timer=setTimeout(function(){
$("#thediv").append("單擊事件觸發");
},300);
})
$("#bt").bind("dblclick",function(){
clearTimeout(timer);
$("#thediv").append("雙擊事件觸發");
})
})
</script>
<body>
<div id="thediv"></div>
<input type="button" id="bt" value="查看效果"/>
</body>
</html>
以上代碼實現解決了單擊和雙擊沖突的現象,單擊或者雙擊按鈕的時候只會有一個事件觸發。
一.實現原理:
原理其實及其簡單,就是延遲單擊事件處理函數中相關代碼的執行(當然並不是說單擊事件沒有觸發),也就是當第一次點擊按鈕的時候,如果300毫秒內沒有點擊第二次,那么就認為這是一次單擊事件,然后執行相關的代碼,如果300毫秒內又點擊了第二次,那么就會取消定時間函數的執行,單擊事件處理函數中的相關代碼將不會被執行,只會執行雙擊事件處理函數中的代碼。
二.相關閱讀:
1.bind()可以參閱jQuery的bind()方法一章節。
2.clearTimeout()函數可以參閱window對象的clearTimeout()方法一章節。
3.setTimeout()函數可以參閱window對象的setTimeout()方法一章節。
4.append()函數可以參閱jQuery的append()方法一章節。
原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=13135

