当有人点击按钮时,会显示另一个页面。为了防止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)点击第一个应用程序图标。这会导致应用页面出现。如果您点击正确的位置,原始点按会导致下载按钮(在应用页面上)被触发。
答案 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/