我有一个Jquery Mobile页面。在我的标题中,我有一个按钮,可以打开我实际页面上方的隐藏层。该图层还包含一个标题,在同一位置有一个按钮。如果我显示图层并单击按钮,它会出现"出血"通过触发下面的按钮。
不确定HTML是否有任何帮助:
<div data-role="page" id="base" data-wrapper="true">
<div data-role="header" data-theme="a">
// first button
<div class="headWrapLeft ui-btn-left">
<div data-role="controlgroup" >
<select data-iconpos="notext" data-icon="home">
<option value="global">ALL</option>
<option value="local" selected="selected">SINGLE</option>
<option value="menu">Main Menu</option>
</select>
</div>
</div>
<h1>Header</h1>
</div>
<div data-role="content">
// page content
</div>
<div data-role="panel" data-id="setup" data-panel="popover"">
<div data-role="page" data-show="first" id="main_setup">
<div data-role="header" data-position="fixed" data-theme="a">
// back button will be inserted here
<h1>Setup</h1>
</div>
...
</div>
</div>
</div>// end wrapper page
第一页是我的基页。弹出窗口面板是一个覆盖容器,在智能手机上作为全屏HTML页面打开。在平板电脑上一切正常,因为面板打开就像一个弹出窗口而且没有按钮&#34;后面&#34;背景上的面板。然而,在智能手机上,后退按钮位于背景页面选择的顶部。当我单击后退按钮时,选择会触发。
问题:
您可以找到一些人在这里和那里询问如何通过点击Android来防止出血。我还没有找到任何有效的解决方案。
我不确定这与事件冒泡或z-index被忽略有关,所以:
我正在寻找任何想法如何确保,如果我点击一个按钮,这个按钮,没有其他任何东西得到点击...任何关于如何实现这一点的想法非常感谢!
感谢您的帮助!
修改
我想我知道什么是错的 - 在Android上看到这个问题:
http://code.google.com/p/android/issues/detail?id=6721
思考解决这个问题的最佳方法是什么。我无法将后台页面设置为display:none或将其移出视图,因为叠加页面是嵌套的。我也不想在叠加页面可见时禁用所有后台链接。
感谢您提供更多想法!
答案 0 :(得分:3)
从false
方法返回click()
可以防止它再冒泡。
答案 1 :(得分:1)
您没有展示如何绑定您的事件处理程序,所以我必须假设您绑定了vclick
事件。如果是这种情况,那么您将不得不手动丢弃已分派的第二个vclick
事件。
vclick
事件可以在某些设备上触发两次(即Android 2.1到2.3,但也包括其他设备),如果点击区域周围的内容在这两个事件触发的时间之间发生变化,则可以获得两个触发事件处理程序的元素。
以下是我想使用vclick
事件时使用的修复:
//setup flag
var vclick_ok = true;
//delegate the event handling so any element added at any time with the correct class and tagName will trigger this event handler
$(document).delegate('a.vclick', 'vclick', function () {
//check if it's OK to run the event handler
if (vclick_ok) {
//if it's OK to run, disable the next time this event handler runs until the setTimeout fires and resets the flag
vclick_ok = false;
setTimeout(function () { vclick_ok = true; }, 500);
}
});
这允许链接每半秒只按一次,这对于打开对话框应该没问题(因为用户不希望能够快速点击按钮)。
答案 2 :(得分:1)
确定。我正是这样做的。
在显示叠加弹出式面板时,我称之为:
// Android-Bleeding-Click
// http://code.google.com/p/android/issues/detail?id=6721
var $popPanel = $('div:jqmData(id="setup")');
$('.ui-page').not( $popPanel.find('.ui-page-active') )
.find(".ui-header")
.first()
.find(".ui-btn, input, select, textarea")
.addClass('ui-disabled androidStealsMyTime')
.attr('disabled','disabled')
隐藏叠加层时,我称之为:
$('.androidStealsMyTime').removeClass('ui-disabled androidStealsMyTime')
.removeAttr('disabled');
以上是JQM增强元素。如果它是普通输入,您可以在输入本身上切换 disabled ,但由于JQM将一些元素添加为子项或兄弟项,因此您需要捕获所有内容。它不完美...禁用=禁用a.link元素在语义上有问题我猜,但随后agin,它适合一行并且工作。