我有一个jquery / phonegap应用程序,除了一个小项目外,一切都很好,速度快。第一个初始vclick,点击两次拾取的任何内容。你做完第一个之后,一切都还好。我尝试了各种类似e.preventDefault();在许多地方尝试过加载页面但仍然无论我总是得到最初的双击。
这里是样本ecmascript
$('nav[id="homeList"] div[data-cust="homelink"]').live("vclick",function(e){
e.preventDefault();
var over = $(this).attr('data-over');
if(over !== undefined){ $(this).addClass(over); }
var pageTo = $(this).attr('data-pagename');
Log( 'Page to: ' + pageTo );
if(pageTo !== undefined){
$.mobile.changePage("#" + pageTo);
if(over !== undefined){ $(this).removeClass(over); }
}
//e.preventDefault();
});
这是示例HTML:
<div class="ui-listitem">
<div class="block sprite2 binbox relat" data-pagename="inbox" data-over="binboxover" data-cust="homelink"></div>
</div>
带有homeList的导航只是我的html5标签,所有的ui-listitems都在里面 真的很困惑,但我确定有人知道如何取消这种奇怪的行为。
感谢
p.s我在这里看过其他双击/双事件火灾,但它们与一遍又一遍发生的事情有关,我必须强调这只是第一次
我找到了某种修复方法,但是如果点击相同的位置则会取消点击 我已经尝试设置某种全局变量,但这意味着每个tap都必须在全局注册,因此全局保持最后一次点击位置,以及取消我的初始按钮点击位置。我还认为如果有一个全局点击位置,那么就没有必要检查但是不会取消第一个它只会阻止其余的,无论如何这里是取消的代码,但是阻止:
var lastClick = $( this ).attr( 'data-lastclick' ),
curClickPoint = e.clientX+'x'+e.clientY
if( lastClick === curClickPoint) return false;
$( this ).attr( 'data-lastclick', curClickPoint );
好的想出了一个最终解决方案:
设置全局
var hasDoneFirstClick = false;
在与上面相同的功能中我使用了这段代码:
if ( !hasDoneFirstClick ) {
hasDoneFirstClick = true;
return false;
}
只是初始点击加倍,所以我忽略了第一次点击/点击!
答案 0 :(得分:4)
我不确定这会回答你的问题,但Beta 2中的jQueryMobile选择使用click代替vclick。您可以阅读发布说明:
引用:
Backtrack:我们已从vclick切换回点击链接
在Beta 1中,我们决定使用自定义vclick事件来处理Ajax 链接以提高响应能力并隐藏iPhone上的URL栏 和Android手机。尽管我们之前做了很多测试 登陆这个Beta 1,我们开始听到这种变化的反馈 在野外引发了一些重大问题,包括:
导致导航和表单元素问题的多次单击事件 - 在某些情况下,点击元素时,点击/单击事件 似乎在链接上发射两次,并且是由于边缘情况所在 由于如何,触摸事件和鼠标事件的目标不匹配 浏览器计算这些事件的容差。这是最多的 在Android 2.1上发音,但影响了大多数基于WebKit的浏览器 当在边缘附近发生敲击事件时不同程度地发生 元件。
自定义脚本中的点击处理程序不再“正常工作” - 如果a 脚本仅限于单击文档上的事件,全局 vclick功能可能会因为触摸事件而发生干扰 取代单击事件,以便事件不会触发。 基于大量详细的测试和分析,我们决定 回滚到使用链接上的标准点击事件而不是使用 自定义vclick事件,因为它是唯一可靠的方法 支持所有目标浏览器。有两件重要的事情要做 请注意此更改:
答案 1 :(得分:0)
我知道这是一个旧的,但我刚刚遇到它,如果有其他人这样做,我跟踪它在我的$.mobile.changePage
中使用$(document).ready()
,我估计排队了几个在第一次“真实”点击中整理出来的无序事件。