2012-07-09 222 views
4

雙擊事件觸發時,如何取消單擊事件?雙擊事件觸發時如何取消單擊事件

我已經看了一些相關的,我發現的東西,但是工作

Need to cancel click/mouseup events when double-click event detected

function singleClick(e) { 
    // do something, "this" will be the DOM element 
} 

function doubleClick(e) { 
    // do something, "this" will be the DOM element 
} 

$(selector).click(function(e) { 
    var that = this; 
    setTimeout(function() { 
     var dblclick = parseInt($(that).data('double'), 10); 
     if (dblclick > 0) { 
      $(that).data('double', dblclick-1); 
     } else { 
      singleClick.call(that, e); 
     } 
    }, 300); 
}).dblclick(function(e) { 
    $(this).data('double', 2); 
    doubleClick.call(this, e); 
}); 

,如果我使用。對(「點擊」)來代替。點擊(),這個代碼不起作用。

任何想法,爲什麼這是?我不得不使用.on(),因此使用.click()不是一個選項。

+0

'.click'調用'內部.on',所以它應該工作無論哪種方式。你打電話過得怎麼樣?如果必須使用事件委託,事情可能會有所不同。 – 2012-07-09 08:29:06

+0

[點擊已經發生](http://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevent-event-order)如果你需要雙擊表面值*如何做當雙擊事件觸發時,我取消單擊事件?*不起作用。 – Esailija 2012-07-09 08:32:43

+0

@Esailija所以這意味着我不能取消,但我可以選擇忽略它呢? – arvinsim 2012-07-09 08:46:45

回答

1

如果你做.on('click'),你需要做.on('dblclick')。 (在dbl沒有觸發的情況下也有相同的問題)

另外,如果事件沒有觸發,可能是因爲您在此函數完成之後添加了選擇器。

所以......

...而不是$(選擇)。在( '點擊',函數(){}) ... DO $(選擇父)。在( '點擊' ,選擇器,函數(){})。

它的超級整齊升級到.live()

function singleClick(e) { 
    // do something, "this" will be the DOM element 
} 

function doubleClick(e) { 
    // do something, "this" will be the DOM element 
} 

$('selector-parent').on('click', 'selector', function(e) { 
    var that = this; 
    setTimeout(function() { 
     var dblclick = parseInt($(that).data('double'), 10); 
     if (dblclick > 0) { 
      $(that).data('double', dblclick-1); 
     } else { 
      singleClick.call(that, e); 
     } 
    }, 300); 
}).on('dblclick', 'selector', function(e) { 
    $(this).data('double', 2); 


doubleClick.call(this, e); 
});