如何监听两个事件,只在jquery mobile中触发一个函数?

时间:2012-02-02 18:21:08

标签: javascript events jquery-mobile jquery

我有这个:

$('li.clickable').live('click tap', function() {
   console.log("hello");
   )};

如果我这样听并单击列表项,则会触发两个事件=我得到两个“hellos”。我需要在每次“点击”时触发一个功能,但只需要一次!

有没有办法做到这一点。我不能使用“one”,因为第一次点击后该功能会静音,不是吗?

感谢指针!

修改
如果我省略点击或点击,该功能仍然会触发两次。有什么方法可以防止这种情况吗?

2 个答案:

答案 0 :(得分:1)

jQM文档:

  

虚拟鼠标事件
我们提供一组“虚拟”鼠标事件,试图抽象出鼠标和触摸事件。这个   允许开发人员注册基本鼠标事件的监听器,   例如mousedown,mousemove,mouseup和click,插件将会   注意在幕后注册正确的听众   以最快的速度为该设备调用侦听器。在   触摸环境,插件保留了触发事件的顺序   在传统的鼠标环境中可以看到,例如,vmouseup就是   总是在vmousedown之前调度,并在vclick之前调用vmousedown,   虚拟鼠标事件也标准化了如何协调   信息是从事件中提取的,因此基于触摸   环境,坐标可从pageX,pageY,   screenX,screenY,clientX和clientY属性,直接在   事件对象。

     

vclick

用于处理touchend或鼠标点击事件的规范化事件。在触摸设备上,此事件将在 AFTER vmouseup。

中调度

尝试使用:

$('li.clickable').live('vclick', function() {
   console.log("hello");
)};

您还可以测试正在触发的事件

$('li.clickable').live('click tap', function(e) {
    console.log("Which Event: "+e.which + " Event Type: "+e.type);
)};

答案 1 :(得分:0)

由于只有在收听click时您的操作也会触发两次,因此您可能会遇到某些用户或系统怪异。

当电容式触摸屏开始普及并且人们(例如戴着手套)开始双重触发时,我们遇到了各种各样的问题。什么有助于用户双击可能有助于对系统双击:

//global scope:
var triggertimeouts={}

$('li.clickable').live('click tap', function() {
   if (!triggertimeouts.myclicktap) {
      triggertimeouts.myclicktap=window.setTimeout('triggertimeouts.myclicktap=false;',250);
      console.log("hello");
   }
   )};