
No.6ベストアンサー
- 回答日時:
#2~4です。
#4のお礼より引用。
> でも、そんなに多量に追加・削除を繰り返しが想定さなければ、たぶん許されそうな....
まあ、そうですよね。
参照できないところにあるのですし、よほどメモリを圧迫していなければ問題は出そうにないですね。
ただ…。例えば、先の回答のように click を3つ定義する実装があったとして。
私なら、一つだけイベント定義しちゃいます。
document./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'click', function (evt) {
var targetNode = evt.target || evt.srcElement;// イベント呼び出し元の要素ノード
switch(targetNode.id){
case 'Hello':
// 処理
break;
case 'Delete':
// 処理
break;
case 'View':
// 処理
break;
default:
return false;// それ以外は処理を行わない
}
evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;// デフォルト動作を無効に
},false);
イベントそのものは一つなので、匿名関数内部で制御構造を工夫すれば特定条件下で処理を回避する事も簡単にできます。
No.5
- 回答日時:
曖昧な質問ですが、
「ウェブページのHTML上のあるDOM要素にon~のイベントであるJavaScript処理を設定した状態で、そのDOM要素をHTMLから削除した場合、削除後のウェブページにキーボードやマウスで何かの操作をして、設定してあったJavaScript処理を実行する手段があるか?(実行されるか?)」
と言うことであれば、「実行されない」だと思いますが。
HTMLから削除したDOM要素を、削除する前に変数に保存してあれば、その変数を経由して処理を呼び出すことは可能ですね。保存してあれば残るのは当然。
No.4
- 回答日時:
#2,3 です。
申し訳ありません。質問の意図を勘違いしていました。
「イベントハンドラが削除されるのか」ですね。
再び、検証してみました。
-----------
<p id="Hello">Hello, World!</p>
<p id="Delete">Delete</p>
<p id="View">View</p>
<script type="text/javascript">
<!--
document.getElementById('Hello').onclick = function(evt){
console.log('Hello, world!');
};
var helloElement = document.getElementById('Hello');
var helloEventHandler = document.getElementById('Hello').onclick;// イベントハンドラを格納する
document.getElementById('Delete').onclick = function(evt){
//document.getElementById('Hello').onclick = null;// イベントハンドラを削除
document.getElementById('Hello').parentNode.removeChild(document.getElementById('Hello'));// 要素を削除
};
document.getElementById('View').onclick = function(evt){
console.log(helloElement);// Hello要素ノードを表示
console.log(helloEventHandler);// イベントハンドラを表示
helloEventHandler();// onclickで参照される function を実行
};
-->
</script>
-----------
Firebugでコンソールを確認してみてください。
イベントハンドラを削除しない場合は、helloElementを辿っていくと、onclickにfunctionが格納されていることがわかります。
イベントハンドラを削除すれば、nullが格納されます。
つまり、
> DOM要素を削除しても、イベントは消えないのでしょうか?
に対する回答は「削除されない」ですね。
実際にどんな影響を及ぼすかはわかりませんが、とりあえず、null で埋めておくのがベターかと思います。
function 自体はメモリから解放されませんが、少なくともonclickから参照しなくなることは確かですので…。
わざわざテストして調べてくださって有難うございます。
本来、自分で試せるぐらいの人なんですが。
やはり、自分で追加したイベントはちゃんと始末するべきなんですね。
でも、そんなに多量に追加・削除を繰り返しが想定さなければ、
たぶん許されそうな....
No.3
- 回答日時:
ちなみに、イベントを削除する方法は、
document.getElementById('Hello').onclick = null;
でいいはずなんですが、変数に待避させた値は残っちゃってますね。
Deleteをクリックすることでonclickが作用しないことは確認できるのですが…。
イベントオブジェクトの参照ではなく、コピーが格納されてしまっているのでしょうか。
---------
<p id="Hello">Hello, World!</p>
<p id="Delete">Delete</p>
<p id="View">View</p>
<script type="text/javascript">
<!--
var helloEvent;
document.getElementById('Hello').onclick = function(evt){
helloEvent = evt ? evt : window.event;// イベントオブジェクトを格納する
console.log('Hello, world!');
};
document.getElementById('Delete').onclick = function(evt){
document.getElementById('Hello').onclick = null;// イベントオブジェクトを削除
document.getElementById('Hello').parentNode.removeChild(document.getElementById('Hello'));// 要素を削除
};
document.getElementById('View').onclick = function(evt){
console.log(helloEvent);// イベントオブジェクトを表示
};
-->
</script>
---------
掲示板/JavaScript質問板/onclickで定義したイベントリスナを削除するには? - TAG index Webサイト
http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi? …
No.2
- 回答日時:
Firefox3.6, IE8でイベントを定義した要素ノードを削除しても、イベントオブジェクトが残ることを確認しました。
---------
<p id="Hello">Hello, World!</p>
<p id="Delete">Delete</p>
<script type="text/javascript">
<!--
var helloEvent;
document.getElementById('Hello').onclick = function(evt){
helloEvent = evt ? evt : window.event;// イベントオブジェクトを格納する
console.log(helloEvent);// イベントオブジェクトを表示
};
document.getElementById('Delete').onclick = function(evt){
document.getElementById('Hello').parentNode.removeChild(document.getElementById('Hello'));// 要素を削除
console.log(helloEvent);// イベントオブジェクトを表示
};
-->
</script>
---------
event - MDC
https://developer.mozilla.org/ja/DOM/event
element.onclick - MDC
https://developer.mozilla.org/en/DOM/element.onc …
No.1
- 回答日時:
//あくいはないんだ。
まっとうなかいとうがつくまで、ひまつぶしに!
http://ganchiku.com/2007/10/before_removechild_r …
にほんごもびみょうだから、えいごは・・・。^^;
有難うございます。
「removeChildのみならずreplaceChildのときも必要!さらに、innerHTMLで内でEventを指定していた要素にも必要」
なんですね。
全然気にしてませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ルパン
-
DOM要素を削除しても、イベント...
-
javascriptの基本的なことだと...
-
createElementした直後の要素の...
-
webページ上のTabキーの動き
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
-(ハイフン)_(アンダーバー)の...
-
クリックすると上に開くアコー...
-
同じIDで定義した要素の配列を...
-
ジェネレーターの作り方
-
javascriptで編集可能不可能の...
-
confirmの連続?
-
問題はbind の付いたリスナーを...
-
C#テキストボックスの文字を配...
-
ASP+アクセスでのSQLコメントに...
-
サンプルによく出てくるhogehog...
-
アンカーリンクをクリックさせ...
-
javascriptでiframeのURL変更は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScript window.openで開く...
-
Latexに関する質問です。
-
excle VBA とweb上の検索を利用...
-
マウスオーバー時の文字サイズ
-
投稿画像の確認画面
-
ラジオボタンでreadonlyの切替え
-
javascriptの基本的なことだと...
-
DOM要素を削除しても、イベント...
-
JavaScriptでセンター表示で行...
-
特定文字列を消したい
-
乗換案内 VBAで操作したい
-
リストボックスの条件
-
XMLでのAttributeを持ったNode...
-
javascriptのdocument.allにつ...
-
選択した部分を新しいウィンド...
-
TexでΣの添え字の位置直し
-
webページ上のTabキーの動き
-
JavaScriptでPOSTで自ウィンド...
-
showModalDialogで開いた画面を...
-
ダブルでコンボボックスについ...
おすすめ情報