2013-06-27 74 views
3

我試圖檢測mouseup或touchend事件,而沒有它發射兩次。完整的示例在這裏:preventDefault()不停止在Android上的mouseup事件

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
     $("#t").on("touchend mouseup", function(e){$("body").append(e.type + "<br>"); e.preventDefault();}); 
     }); 
    </script> 
    </head> 
    <body> 
    <div id="t" style="position: absolute; left: 200px; width: 200px; height: 200px; background: blue;"></div> 
    </body> 
</html> 

在平板電腦上,在touchend事件觸發,然後再延遲一段時間後,鼠標鬆開事件觸發。所以我包含e.preventDefault()行,並根據需要在iPad上停止mouseup事件。但它對Android沒有影響。這兩件事仍然發生。使用「返回false」,stopPropagation()和/或stopImmediatePropagation()也沒有效果。請注意,我可以刪除touchend事件,但我不希望平板電腦上的延遲等待mouseup啓動。我需要爲非平板設備包含mouseup。我也不想測試觸摸功能,然後解除鼠標支持,因爲有人可以同時擁有支持觸摸和鼠標的筆記本電腦並使用它們。我只想讓Android停止觸發mouseup事件。

+0

你可以嘗試從回調中返回false嗎? – bitoiu

+0

@bitoiu,我在文章中提到「return false」。它也沒有工作。 – kbriggs

回答

0

谷歌幾年前曾有一篇關於這件事的文章,稱之爲FastButtons。此實現應該這樣做:

https://developers.google.com/mobile/articles/fast_buttons

+0

我沒有實現一個按鈕控件,也沒有解釋爲什麼preventDefault不像iOS那樣使用touchend。然而,該文章中的一件事引起了我對使用touchDefault的preventDefault的關注。如果我在綁定中包含touchstart,然後在觸發時忽略它,preventDefault將在Android中停止鼠標事件。仍然看起來像一個bug。我有一箇舊版本的Android(2.2.1),因此可能從那時起它已經被修復。 – kbriggs

0

我只是遇到了同樣的問題,只能找到一個很醜陋的解決方案:setTimeout

http://jsfiddle.net/FjuHu/6/

/** 
    * Prevent Android from triggering buggy phantom clicks 
    * 
    * @param {jQuery} $element 
    */ 
    function preventPhantomClicks($element) { 
    /** 
    * Click catcher 
    * @param {!jQuery.event=} event 
    */ 
    function preventHandler(event) { 
     event.preventDefault(); 
    } 

    // catch all events for the next 350ms 
    $element.on('click', preventHandler); 
    setTimeout(function() { 
     $element.off('click', preventHandler); 
    }, 350); 
    } 
0

我是用意想不到的事情摔跤(突然的Android mouseups爲例)。

因爲我正在偵聽touchup並獲得意想不到的mouseup,所以我的解決方案是將所有事件傳遞到一個篩選器([node] .setEventListener),這將決定我是否希望它們發生,並且我會阻止任何我不希望通過在批准的事件對象上設置自定義標誌,並阻止/阻止任何缺少事件的事件。

我能夠避免這種超時。不優雅,但暫時建立更多的控制系統。

相關問題