- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jQueryで設定したイベントハンドラが消える)
jQueryで設定したイベントハンドラが消える
このQ&Aのポイント
- jQueryを使用してイベントハンドラを設定すると、一度要素を非表示にして再表示させるとイベントハンドラが消えます。attachEventを使用してイベントハンドラを設定すると再表示後も動作します。
- jQueryのイベントハンドラ設定APIを使用してイベントハンドラを設定すると、要素を非表示にした後に再表示させるとイベントハンドラが消えてしまいます。しかし、attachEventを使用してイベントハンドラを設定すると再表示後もイベントが動作するようになります。
- jQueryを使用してイベントハンドラを設定する場合、要素が非表示になった後に再表示させるとイベントハンドラが消える現象が起こります。この現象を回避するためには、attachEventを使用してイベントハンドラを設定する方法があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「$("#test").html("");」の指定でセットしていたclickイベントが消されているみたいですね。 なぜイベントまで消えるかはわかりませんが、JQueryのソースコードみたら確かに empty()でイベント消してる箇所がありました。 で表示、非表示的な処理はshow関数とhide関数を使えばいいと思います。 === JavaScript === var clicked = function () { alert(1); }; var jqButton = $("<input type='button' value='test' />"); jqButton.click(clicked); $(function() { $("#test").html(jqButton); $("#showButton").click(function () { $("#test").show(); }); $("#hideButton").click(function () { $("#test").hide(); }); }); === HTML === <input type="button" id="showButton" value="show" /> <input type="button" id="hideButton" value="hide" /> <div id="test" style="display:none;"></div>
お礼
回答ありがとうございます。 自分でも調べてみたところ、イベントハンドラを削除しているのは メモリリーク対策とのことでした。 確かにhtml()で要素のオブジェクトを参照できなくなってしまったら、 イベントハンドラとDOMで引き起こされるメモリリークを解消できませんね・・・ というわけで解決です。 ありがとうございました。