2015-08-28 199 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