質問: ("ontouchend" in document) ? 'touchend':'click'; $(window).on("load resize",function(){ $(#a_btn).on({_e,function(){ setTimeout(function(){ // モーダルを表示する処理。hiddenになっているモーダルエリアをshowする。 },10); // settimeoutを書く前は以下のような記述を入れていましたが、起動したモーダルはクリックされました。 // _e.preventDefault(); }) ``` touchendに変更し、setTimeoutを使っています。 どうも2つ処理が実行される原因がtouchstartのイベントが維持時間がありそうなのです。 イベントが瞬間的には知らず、少し続いているような。そのためsetTimeoutで実行を遅らせることにより、2つの処理が発生するのを防ぎました。 touchendは手が離れた瞬間から計測しないと処理にばらつきが出るためです。 このような暫定的な対応は致しましたが、かなり懸念点が残ります。 このような経験がある方などアドバイス頂ける方がいらっしゃいましたらよろしくお願いいたします。 ちなみに処理の最後に ・preventDefault(); ・return false; を書いても問題は解決されませんでした。 よろしくお願い致します。
回答: いまいちわからないのですが、「登録したイベントが複数回起こる」というのであれば `$(window).on("load resize",function(){});` の中で `$(#a_btn).on();` をしているので、ロード/リサイズのたびにイベントを重複して登録しているからです。 また、モーダルの仕様がわからないので回答しずらいです。「モーダル」が前面に配置して表示を消しているだけの場合、ボタンがあればクリックできます。