雙擊和單擊事件沖突解決方法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM