モバイル デバイスで動作するはずの html5 アプリケーションを作成しました。90% の場合は正常に動作しますが、特定のデバイス (主に Android 4.0 以降) では、クリック イベントが 2 回発生します。
私はそれが起こる理由を知っています.iScroll 4を使用してネイティブスクロールをシミュレートし、スクロール内で発生するイベントを処理します.(興味がある場合は533行目でイベントをディスパッチします) iScroll によってディスパッチされたイベントと、要素に関連付けられた元の onClick イベントの両方が発生するため、クリックが 2 回発生します。これが発生するデバイスのパターンが見つからないため、ダブルクリックを防ぐための代替手段を探しています。
私はすでに問題を解決する醜い修正を思いつきました。すべてのクリックを「handleClick」メソッドでラップしましたが、これは 200 ミリ秒を超える頻度で実行することはできません。それを維持するのは本当に大変でした。コンテンツを動的に生成した場合、オブジェクトをパラメーターとして渡そうとすると、非常に混乱し、さらに悪化します。
var preventClick = false;
function handleClick(myFunction){
if (preventClick)
return;
setTimeout(function(){preventClick = true;},200);
myFunction.call():
}
function myFunction(){
...
}
<div onclick='handleClick(myfunction)'> click me </div>
ページ全体ですべてのクリック イベントをインターセプトする方法を見つけようとしていましたが、イベントを発生させるかどうかはどうにか解決できます。そのようなことは可能ですか?
クリック時に myFunction を設定しますが、呼び出される前にトリガーしhandleClick()
ますか? 現在、カスタム イベントで遊んでいます。有望そうに見えますが、アプリケーション全体のすべてのイベントを変更する必要はありません。
<div onclick='myfunction()'> click me </div>