2015-12-27 111 views
0

我正在嘗試處理觸摸/鼠標事件。所以,我創建了這個代碼:在Firefox中停止冒泡事件

myObject.addEventListener("touchstart", function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    console.log("Touched"); 
    mouseTouchDown(e); 
}); 
myObject.addEventListener("mousedown", function(e){ 
    console.log("Clicked"); 
    mouseTouchDown(e); 
}); 
function mouseTouchDown(e){ 
console.log("Some function.");}; 

我想停止觸摸事件的冒泡,所以點擊後不會被解僱。它可以在Chrome上運行,但是在Firefox上我可以在控制檯上運行:

Touched 
Clicked 

如何在觸摸事件後停止鼠標點擊觸發?

我試圖返回false,但它不起作用。

+0

雖然這看起來像一個FF錯誤,你是否在觸摸的動作實際上不同於點擊動作的情況下工作?如果它對300ms以下時間不敏感,那麼您可以在點擊事件上執行該方法,而不是同時執行這兩個 –

回答

0

你是否在同一個元素上附加了兩個事件?

如果是這樣的錯誤是因爲冒泡happening.while鼠標點擊幾件大事將發生像mousedown的情況並非如此,touchstart ..etc.so如果你想避免鼠標點擊事件存在的在鼠標加入preventDefault()下來。這將禁用在該元素上發生的默認鼠標點擊事件。

+0

我需要處理的情況:元素 – Alyona

+0

@ user3629015你可以更具體的案件? – sundar

+0

我需要處理的情況:1.)元素將在PC上用鼠標點擊。 2.)元素將觸及任何觸摸設備。這就是爲什麼我附加了2個事件,鼠標和觸摸。一切工作正常,簡單的鼠標點擊,但觸摸事件也觸發鼠標點擊。所以根據這篇文章http://www.html5rocks.com/en/mobile/touchandmouse/我添加了e.preventDefault();它在Chrome中很好地工作,但不幸的是不在FF中。讓我有點困惑。 – Alyona

1

這看起來像在瀏覽器中的錯誤,你的代碼看起來很好。

參見:https://bugzilla.mozilla.org/show_bug.cgi?id=977226
你用什麼操作系統/ Firefox版本測試?

+0

等待,因此操縱_touch event_會影響類似的_click event_? –

+0

@PaulS。您可以防止觸摸事件觸發點擊事件,請參閱:https://developer.mozilla.org/en-US/docs/Web/API/Touch_events#Tracking_new_touches – lleaff

+0

太棒了,但它看起來像是[特別是' .preventDefault' on the initial event](https://developer.mozilla.org/en-US/docs/Web/API/Touch_events#Additional_tips),這違反了「默認操作是觸發點擊事件」鏈。 。我沒有意識到這些被鏈接在之前;認爲一個動作導致兩個獨立發生 –