2011-07-21 4 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イベントは、接続されたイベントとtouchstartに続くイベントがすべて抑制されるためです。 これを解決するには、代わりにtouchMoveイベントにpreventDefault()を追加します。

このMozilla documentation取り扱いがクリック数下でより詳細に説明される:touchstart又は一連の最初のtouchmove イベントでのpreventDefault()を呼び出すため

発射から対応するマウスイベントを防ぎ、 touchmoveではtouchstartではなくpreventDefault()を呼び出すのが一般的です。そうすれば、マウスイベントはまだ発火し、 のようなものは引き続き動作します。

関連する問題