jquery雙擊事件會觸發單擊事件


實際工作中,我們經常會遇到在同一個元素上,綁定多種事件類型,比較常見的是單擊事件和一些鼠標事件,一般而言影響不大。但是如果同時綁定單擊事件和雙擊事件呢?

其實,只要能夠想明白的話,解決方案也比較簡單,我們想象一下單擊事件執行過程:mousedown, mouseup, click。雙擊事件的執行過程呢?mousedown, mouseup, click; mousedown, mouseup, click。仔細看,其實雙擊事件就是執行了兩次單擊事件,那這種情況下,怎么才能避免觸發單擊事件呢?

奧秘就在於延遲定時器setTimeout,單擊事件延遲執行,如果檢測到連續點擊的話,就認為是雙擊事件,不在執行單擊事件。

//  單擊事件
var timer = null; $('.mask-body').on('click', '.leaver-student', function () { // 點擊輸入框展開下拉列表 clearTimeout(timer); timer = setTimeout(function () {
  // 這里采用執行自定義事件的方式 $('.leaver-student').trigger('slide'); }, 300);   // 延遲300ms執行單擊事件 });

//  雙擊輸入框時可以輸入學生姓名  雙擊事件
$('.mask-body').on('dblclick', '.leaver-student', function (ev) {
  ev.stopPropagation();
  clearTimeout(timer);
  $('.leavers li').trigger('click');
  $(this).removeAttr('readonly').val('').focus();
});

 由此擴展出去,在觸摸屏上觸發滑動事件時,為什么沒有觸發單擊事件呢?

事實上采用的是相同的方式,在點擊事件時,延遲執行,以便設備確認這次操作究竟是不是真正的點擊事件。  


免責聲明!

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



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