jQuery 雙擊事件(dblclick)時,不觸發單擊事件(click)


萬惡的雙擊事件啊!!

  在jQuery的事件綁定中,執行雙擊事件(dblclick)時能觸發兩次單擊事件(click)。即一個標簽元素(如div等),如果元素同時綁定了單擊事件(click)和雙擊事件(dblclick),那么執行單擊事件(click)時,不會觸發雙擊事件(dblclick), 執行雙擊事件(dblclick)時卻會觸發兩次單擊事件(click)。

  先看一下點擊事件的執行順序:

  單擊(click):mousedown,mouseout,click;   雙擊(dblclick):mousedown,mouseout,click , mousedown,mouseout,click,dblclick;

  在雙擊事件(dblclick),觸發的兩次單擊事件(click)中,第一次的單擊事件(click)會被屏蔽掉,但第二次不會。也就是說雙擊事件(dblclick)會返回一次單擊事件(click)結果和一次雙擊事件(dblclick) 結果。而不是一次雙擊事件(dblclick)結果和兩次單擊事件結果(click)。 

  如此這般的話,只需消滅掉多余的一次單擊事件(click),這個問題就解決了。

  setTimeout

  在jQuery的$(document).ready(function(){})里面直接開寫:

 

//定義setTimeout執行方法
var TimeFn = null;

$('div').click(function () {
    // 取消上次延時未執行的方法
    clearTimeout(TimeFn);
    //執行延時
    TimeFn = setTimeout(function(){
        //do function在此處寫單擊事件要執行的代碼
    },300);
});

$('div').dblclick(functin () {
     // 取消上次延時未執行的方法
    clearTimeout(TimeFn);
    //雙擊事件的執行代碼
})
View Code

 

從測試結果來看,如果前后兩次點擊的時間在 300ms 左右的時候,還是很容易出現 click 和 dblclick 事件被“同時”調用的情況,而如果間隔的時間更短或更長,則只會有 click 或 dblclick 事件。

至此,能一定程度上避免雙擊(dblclick)時觸發單擊(click)。


免責聲明!

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



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