7

モバイル デバイスで動作するはずの 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>
4

2 に答える 2

8

次の方法でそれを行うことができます(ただし、お勧めしません):

$('body').on('click', function(event){
  event.preventDefault();
  // your code to handle the clicks
});

これにより、ブラウザでのクリックのデフォルト機能が妨げられます。クリックのターゲットを知りたい場合は、 を使用するだけevent.targetです。preventDefault(); の前にクリック チェックを追加する方法については、この回答を参照してください。

于 2013-10-18T12:18:38.657 に答える
0

属性に関するイベントは好きではありませんが、それは私だけです。

jquery を考える:$(selector).click(function(){ <your handler code> }次のようなことができます:

$(selector).click(function(event){
    handleClick(window[$(this).attr("onclick")]);
};

もちろん、パラメータはありません...

于 2013-10-18T12:24:10.597 に答える