2011-09-18 4 views
1

ビューの数と私は私の問題を伝えるのが悪い仕事をしたことを想定しなければならない応答の完全な欠如に基づいてEDITどのようにして、touchendイベントがブラウザによって「記憶」され、その後不適切な時に発砲するのを防ぐことができますか?

。私は今それを是正しようとします。

私はそうのような新しいタップ方法でのHTMLElementのプロトタイプを拡張:私もjQueryの作成

$(document).delegate("*", "touchend", function (e) { 
    $(this).trigger("tap"); 
}); 

:私もjQueryのカスタムタップイベントを作成し

HTMLElement.prototype.tap = function (func) { 
    this.addEventListener("touchend", func, false); 
}; 

タップ

と呼ばれるプラグイン

アラートステートメントを含むコールバック関数でこれらの関数を使用しようとすると、コールバックが2回実行されます。私は警告をポップアップするために要素をタップします。私はそれを閉じるアラートの "OK"ボタンをタップします。私がどれくらい待っても、次回は画面をタップすると、アラートが再びポップアップします。今回は「OK」ボタンをタップしても、もう1つのリピートを設定していないようです。

しかし、コールバック関数に警告文が含まれていない場合(代わりにconsole.logステートメントを使用するなど)、コールバックは1回だけ実行されます。

誰もこれに対処する方法を知っていますか?私はそれ自体からイベントハンドラのフックを外してから、それを再バインドしようとしていますが、成功したとしてもそれは何もハックではありません。

私はむしろ「右」の方法をやりたいと思います。私はちょうど私がのHTMLElementまたはElementはプロトタイプだけでなく、カスタムの「タップ」イベントとの両方のためのプラグイン「をタップ」拡張することで使用できる「タップ」機能を書き終えた:-)

ORIGINAL

jQuery。簡単なアラート・ステートメントをテスト・コードとして使用することにするまで、私はこれをバッグに入れたと思っていました。

テストページのいくつかの要素でこれらを使用すると、最初に要素を「タップ」すると正しく発火しますが、アラートの「OK」ボタンをタッチした後に問題が発生し、もう一度画面をタップすると、その時点でイベントハンドラが2回目に起動します。

最初は私のカスタムコードだと思っていましたが、次の非常に基本的なJavaScriptで試してみましたが、全く同じ問題を再現できました。

document.getElementById("some-element").ontouchend = function (e) { 
    alert("Howdy doody!"); 
}; 

は、私はそれは私が警戒に「OK」を実行するには、再度画面をタッチする必要があるという事実とは何かを持っている必要があります想像しながら、アラートがでているので、(イベントハンドラをまだ技術的には「内部」ハンドラ関数の完了を「ブロックする」効果)。

以下の少し異なるコードで動作が複製されないという事実は私の想像力を支えているようです。私はページに上記のコードが含まれており、コールバックの火災の後、その要素をタッチすると、私は「コードの前のブロックとは対照的に、

document.getElementById("some-element").ontouchend = function (e) { 
    console.log("Howdy doody!"); 
}; 

:-)私は、コールバック関数の繰り返し発火を取得することはありません次回に「OK」を押した後に画面をタップすると、アラートポップアップが再び表示されますページ上でどこでもをタップします。

本当に奇妙な問題で、なぜこれが起こっているのかについての情報は見つかりませんでした。誰が何が起こっているのか考えているのですか?

答えて

3

私は、タッチ終了時にトリガされたビジュアル全面アラートがタッチイベントサイクルを妨害していると考えています。 DOMに降伏した後にアラートを呼び出すようにしてください。例えば。

setTimeout(function() { 
    alert('btn clicked'); 
}, 0); 
関連する問題