2011-07-21 54 views
2

我嘗試爲我的iPad設備實現一些JavaScript功能。我想使用一些滑動動作,並點擊我的畫布div上的動作。當爲touchstart事件調用preventDefault()時,爲什麼onclick事件被抑制?

我實現了水平和垂直滑動功能。我必須使用touchstart事件的preventDefault來防止整頁滾動。它運行良好,但在此之後,我注意到它禁用了此div上的每個點擊事件。當preventDefault被移除時,click事件再次起作用。

有沒有解決這個問題的方法?

dojo.connect(this.node, "ontouchstart", this, "touchstart"); 

... 

touchstart: function(e){ 
    this.touch = dojo.clone(e.changedTouches[0]); 
    e.preventDefault(); 
} 

this.node = document.getElementById('aa');

<div id="aa" style="width: 600px; height: 400px;"> 
    <div onclick="alert('asd');" style="width: 100px; height: 100px; background-color: #ff0000; margin: auto;"> 

    </div> 
</div> 
+0

請問您可以發佈您的Javascript和HTML代碼嗎? – pixelfreak

+0

我剛剛添加了代碼的相關部分。 –

+0

嗯,你還可以發佈'this.node'是什麼? – pixelfreak

回答

2

您可以嘗試阻止touchmove事件的默認操作。

7

我知道Prusse已經正確回答了這個問題,但是它缺乏在一個答案中尋找的信心。 touchstart中的preventDefault()抑制了click事件的原因是因爲任何連接並跟隨觸摸開始的事件都將被抑制。 解決方法是將preventDefault()添加到touchmove事件中。

這更詳細地說明在Mozilla documentation處理點擊次數

由於在touchstart或一系列的第一touchmove 事件調用preventDefault()方法防止燒成時的對應的鼠標事件, 通常在touchmove上調用preventDefault()而不是 touchstart。這樣,鼠標事件仍然可以觸發,像 鏈接將繼續工作。

相關問題