2

phoneGap (android & ios) を使用して JQM アプリをパッケージ化しました。正常に動作しますが、バックグラウンドでクリック/タップ イベントが発生するなどの問題が発生する場合があります。つまり、ポップアップ ウィンドウのボタンをクリックすると、クリックがバックグラウンド ボタンに伝播されます。どうすればそれを防ぐことができますか? 現在、ポップアップの背後にオーバーレイを設定し、オーバーレイを削除するための遅延を設定しました (これは良い方法だとは思いません) が、オーバーレイをここに配置できないため、下部のタブ バーに同じ問題が表示されます。

4

2 に答える 2

1

event.stopPropagation()を使用して、イベントが DOM ツリーをバブリングしないようにし、親ハンドラーにイベントが通知されないようにします。

フィドルの例を見る

オン ボタン クリックの表示<div>とオン<body>クリック イベントの非表示

編集:

ライブメソッドによるjquery stopPropagation問題から抽出

  • live()ハンドラーはドキュメントにあります
  • イベント ハンドラーは、特定の要素にバインドされた順序で実行されます

私たちは同じレベルにいるので、伝播を停止して確認する必要があります。.stopPropagation() はバブリングがそれ以上にならないようにしますが、それは問題ではありません。それは DOM で同じレベルにあるため、.isPropagationStopped() を使用して停止したかどうかを確認する必要があります。また、ハンドラーは順番に起動するため、他のイベント ハンドラーの後にその document.onclick をバインドする必要があります。そうしないと、他のイベント ハンドラーが伝播を停止しようとする前に最初に実行されます。

于 2012-07-27T06:09:33.617 に答える
1

ポップアップウィンドウが呼び出されたときに、クリック可能な要素を持つイベントを関数にバインドする解決策を見つけました。このような :

function callPopupWindow(){
  $('#list li a').bind('click',function(e){
   e.preventDefault();
     //steps to do
   e.stopImmediatePropagation();
   $('#list li a').unbind('click');//if not unbinded it will trigger one more event with the elements.
  });
}

すべてのブラウザー (iphone、andriod、そしてもちろん firefox と chrome) で動作します。

于 2012-07-31T04:35:57.990 に答える