jquery移动初始第一次点击/点击已注册两次

时间:2011-09-15 13:59:07

标签: jquery jquery-mobile cordova

我有一个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;
    }

只是初始点击加倍,所以我忽略了第一次点击/点击!

2 个答案:

答案 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(),我估计排队了几个在第一次“真实”点击中整理出来的无序事件。