質問: function(event){ event.preventDefault(); } $(".modal-button").click(function(){ // スクロール停止の処理 window.addEventListener("touchmove", function(event){event.preventDefault();}, {passive: false}); return false; }); $(".modal-close").click(function(){ // スクロール開始の処理 window.removeEventListener("touchmove", function(event){event.preventDefault();}, {passive: false}); return false; }); ``` ### 試したこと 開始、終了後のpassiveの中身を見てみましたが、 どちらもfalseだったりで、お手上げ状態です。 ### 補足情報(FW/ツールのバージョンなど) ios12 Safari PC版Chromeの開発者ツールのテスターでも再現するかと思います。 preventDefaultで消したイベントを復活させる もっといい最適解もあればお伺いできますと幸いです。 よろしくお願いいたします。
回答: `removeEventListener`で正しくイベントを解除するには、`addEventListener`と**同じ関数オブジェクト**を渡さないといけません。 全く同じ内容で作った関数リテラルでも、別々に書けば**別な関数オブジェクト**となってしまうので、正しく`removeEventListener`を行うには、「変数に保管しておく」あるいは「関数宣言として書いて同じものを使う」といった方法しかありません。