点击一个元素,触发点击移动Safari上同一位置出现的另一个元素(幽灵点击)

时间:2013-07-21 01:27:16

标签: jquery iphone ios html5 mobile-safari

当有人点击按钮时,会显示另一个页面。为了防止tap出现在新页面上的另一个元素级联,我们使用preventDefault。我们已经将此视为StackOverflow上其他地方问题的解决方案。但是,它不适合我们。

代码:

// 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)点击第一个应用程序图标。这会导致应用页面出现。如果您点击正确的位置,原始点按会导致下载按钮(在应用页面上)被触发。

4 个答案:

答案 0 :(得分:2)

您的代码阻止点击传播事件。

但是,很可能其他一些事件会导致触发(猜测:事件点击)。实际上,你的 tap 甚至不是真正的DOM事件,而是由jQuery Mobile框架发明的东西,所以与原生JavaScript事件相比,它很可能表现得不同。

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

尝试绑定点击事件。

答案 1 :(得分:2)

我们的问题是我们使用自定义代码触发了tap事件。我们通过使用jQuery Mobile(1.3.2)来修复此问题。它很臃肿,但它可以工作并处理所有触摸事件,如点击和滑动。

答案 2 :(得分:1)

Google有一个Fast Button面临移动幽灵点击的类似问题。他们最终实现了 click buster

  

“我们想出来处理这些幽灵点击被称为a   点击破坏者。我们所做的只是添加一个click事件监听器   身体,听取捕捉阶段。当我们的侦听器被调用时,我们   尝试确定点击是否是我们已经点击的结果   处理完毕,如果是这样,我们就会调用preventDefault和stopPropagation。“

答案 3 :(得分:0)

ev.stopPropagation()怎么样?您需要停止冒泡以防止其他元素接收事件。 http://api.jquery.com/event.stopPropagation/