初めて自分の家と他人の家が違う、と意識した時

ajaxを利用して追加したhtmlに対して、既存のscriptのイベントが効かなくて困っています。

どういうことかというと、
まず流れとしては、
(1)【webページをブラウザで表示】

(2)【ajax通信でサーバーサイドでビュー(html)を生成】

(3)【ブラウザにそのビューを返して、それをjavascriptで既存のhtmlに追加】
となっております。

そして、この時、例えば、(1)の時にclass="sample"の要素に対してclickイベントを設定していて、(3)の時に追加された要素にもclass="sample"があったとします。
この時、新たに追加されたclass="sample"の要素に対してclickイベントが発生しないのです。

どなたか、解決策を教えてくれないでしょうか?
宜しくお願い致します。

A 回答 (2件)

方法1


(3)のあとにaddEventListenerする

方法2
jQueryを使ってonでイベントを追加する
    • good
    • 0

方法3


 clickイベントは伝播するので、個々のclass="sample"要素に設定せずに、上位要素(documentなど)でイベントを監視し、発生元がclass="sample"の要素であったら処理をするようなイベント処理にする。 (ANo1様の方法2とほぼ同じ効果になります)


<極簡単なサンプル>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">

<script type="text/javascript">
/*@cc_on@*/
document./*@if(1)attachEvent("on"+@else@*/addEventListener(/*@end@*/"click", function(evt){
var t = evt./*@if(1)srcElement@else@*/target/*@end@*/;
if(t.className === "sample"){
//必要な処理。例えば…
alert("イベント発生");
}
}, false);

</script>
</head>

<body>

<p class="sample">元からある対象要素</p>
<p>ここは関係ない</p>

<div>例えばここにあとから追加する</div>

</body>
</html>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!