2015-11-10 3 views
6

IE11とEdgeの両方で動作するJavaScriptアプリケーションを開発しています。IE11でポインタイベントを使用するときにクリックを防止しますか?

pointerover>マウスオーバー> pointerenter>のMouseEnter> pointerdown> マウスダウン>(pointermove>のMouseMove)+> pointerup>のmouseup> :IE11では、(https://patrickhlauke.github.io/touch/tests/results/からコピーされた)、私は見ているイベントのチェーンは以下のとおりです。 (lostpointercapture)> pointerout>マウスアウト> pointerleave> mouseleave>焦点>アプリはすでにマウスとタッチイベントを処理するように配線されている

クリックし、私はキャンセルするポインタイベントのすべてにでpreventDefault()を呼び出します対応するマウスイベント。残念なことに、クリックが最後に届き、問題を引き起こしています。最後にクリックイベントが無効になる方法はありますか?

+2

「pointer-events:none」を追加しようとしてください。 – maioman

+0

ポインタイベントを追加すると、すべてが無効になるようです。私はそれが起こるはずなのかどうかはわかりませんが、残念ながら私はポインタイベントを必要としています(私たちはそれらをpolyfilledし、ウィジェットのタッチイベントとして扱います)。私はポインタを保持する必要がありますが、チェーンの最後にクリックを無視します。 –

答えて

0

私はjQueryポインタイベントPolyfill(https://github.com/jquery/PEP)を使用して、Webkitブラウザで「ポインタアップ」イベントを使用していましたが、同様の問題が発生しました。私の場合、私はリンクが続くのを防ぐ必要がありました。

「ポインターアップ」がトリガーされた直後に「クリック」イベントリスナーを追加し、「クリック」イベントを防ぎ、そのリスナーを削除することで問題を解決しました。このように:

var myLink = document.getElementsByClassName("myLink")[0]; 

myLink.addEventListener("pointerup", handleLinkPress); 

function handleLinkPress(evt) { 
    // do something here... 

    evt.target.addEventListener("click", unfollowLink); 

    function unfollowLink(evt) { 
     evt.preventDefault(); 
     evt.target.removeEventListener("click", unfollowLink); 
    } 
}