2015-08-28 135 views
1

我正在创建一个jQuery移动应用程序,应该可以在移动设备和PC上工作。我使用了jQuery插件手指(http://ngryman.sh/jquery.finger/)来检测手指的事件:jQuery手机点击事件触发vclick

$('body').on('tap', 'image', function(e) { 
    console.log(e); 
}); 

的问题是,水龙头事件被触发两次。

[1] v.Event {type: "tap", x: 600, y: 374, orientation: null, end: false…} 

[2] v.Event {originalEvent: v.Event, type: "tap", timeStamp: 1440756290573, jQuery183031088717421516776: true, toElement: image#7…} 

当我崩溃的开发人员工具的第二个事件信息,类型显示为“V单击”。

... 
shiftKey: false 
srcElement: image#7 
target: image#7 
timeStamp: 14407565
toElement: image#7 
type: "vclick" 
view: Window 
which: 1 
__proto__: Object 
... 

我该如何防止这种情况发生,因此事件只运行jQuery手指点击事件而不是vclick?

enter image description here

+0

你试过'e.preventDefault()'和'Ë .stopPropagation()'或简单忽略'vclick'事件? – Regent

+0

我已经尝试过他们两个。我不能忽略它,因为我用它来调用一个只能运行一次的函数。 – Sam

+0

您可以忽略第一个电话或第二个电话。或者,您可以收集第一个电话的一些信息,收集第二个电话的一些信息,并在此之后调用您需要的任何功能。 – Regent

回答

1

可以区分事件(忽略它们或做特殊处理)通过检查事件的具体领域。我在originalEvent字段中看到不同。所以,只处理第二个事件,你可以使用这样的事情(event.originalEvent替换函数的参数originalEvent用于测试目的):

$(document).on('tap', function(event, originalEvent) { 
 
    if (originalEvent) { 
 
     console.log('Time to handle event'); 
 
     //code code code 
 
    } 
 
    else { 
 
     console.log('Ignoring event'); 
 
    } 
 
}); 
 

 
$(document).trigger('tap'); 
 
$(document).trigger('tap', ['v.Event']);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

解决方案工作! – Sam