2013-07-21 71 views
5

當有人點擊一個按鈕時,會導致出現另一個頁面。爲了防止在出現的新頁面中點擊到另一個元素,我們使用preventDefault。我們已經將此視爲StackOverflow中其他地方的問題的解決方案。但是,它不適合我們。點擊一個元素觸發點擊移動Safari上同一位置出現的另一個元素(鬼點擊)

代碼:

// Bind what happens when user taps on app 
$('#templates .app_box').on('tap', function(ev) { 
    // Get itunes ID 
    APP_PICKED = $(this).attr('itunes_id'); 

    // If on category page, update category history with new path 
    if (panabee_get_active_page().attr('id') == 'category_page') { 
     // Get app path and scrub app from it 
     var app_path = $(this).attr('path'); 
     app_path = app_path.substring(0, app_path.lastIndexOf(PATH_DELIMITER)); 

     // Convert path string into array and store in history 
     CATEGORY_PICKED_HISTORY = get_path_array(app_path); 
    } 

    // Show app 
    if (playing_game()) { 
     play_app_game(this); 
    } else { 
     panabee_change_page('#app_page'); 
    } 

    // Prevent double tap 
    ev.preventDefault(); 
}); 

重現:

1)從你的iPhone,請訪問:www.tekiki.com

2)點擊第一個應用程序圖標。這會導致應用程序頁面出現。如果您在正確的地方點擊,原始點擊會導致下載按鈕(在應用程序頁面上)被觸發。

回答

2

我們的問題是我們用自定義代碼觸發了龍頭事件。我們通過使用jQuery Mobile(1.3.2)來解決這個問題。它臃腫,但它的工作原理和處理所有觸摸事件,如點擊和滑動。

+0

1.3.1是否造成這種衝突? – Omar

+0

不,我們推出了我們自己的tap/swipe事件處理程序,它以某種方式造成了這種情況(仍然不清楚如何)。使用JQM後問題消失了。 – Crashalot

2

您的代碼阻止事件點擊傳播。

但是,最有可能的是其他事件導致觸發(猜測:事件點擊)。事實上,你的tap甚至不是一個真正的DOM事件,而是由jQuery Mobile框架發明的東西,所以它很可能與本機JavaScript事件相比有所不同。

http://api.jquerymobile.com/tap/

嘗試結合點擊事件來代替。

+0

單擊事件在移動設備上非常可怕,因爲他們在等待查看是否有雙擊。在iOS中點擊事件的字面上會有800毫秒的延遲 - 您可能不想綁定到該事件。 – 1nfiniti

1

Google有一個Fast Button,它面臨着類似的移動幽靈點擊問題。他們最終實施了點擊破解器

「我們來幹什麼了對付這些鬼點擊被稱爲 點擊剋星。我們做的是一個簡單的單擊事件監聽器添加到 體,偵聽捕獲階段。當我們的監聽器我們 嘗試確定點擊是否是由於我們已經處理了 的點擊而產生的,如果是,我們就調用preventDefault並停止傳播。「