雙擊和單擊事件沖突解決方法:
關於單擊事件和雙擊事件,如果單獨拿出來都是非常簡單,這里也就不多介紹了,具體可以參閱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