プロが教えるわが家の防犯対策術!

jQueryを使って、ボタンを押すと要素を追加しています。
後から追加された要素はマウスホバーなどが有効にならないのですが、
対象方法などあるでしょうか。

下記のようなソースで質問の状態になります。
よろしくお願いします。

<html>
<head>
<title>test</title>
<script type="text/javascript" src="system/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
<!--
jQuery(document).ready(function($){
jQuery(".edit").hover(
function () {
jQuery(this).css("background","yellow");
},
function () {
jQuery(this).css("background","none");
}
);

jQuery(".insert").click(function () {
var html = "<div class='edit'><p>add-text</p></div>";
jQuery("#sortable .edit:first").before(html);
});
});
// -->
</script>
</head>
<body>

<div><INPUT class="insert" type="button" value=INSERT></DIV>
<div id="sortable" style="width:200px;">

<div class="edit">
<p>text1</p>
</div>

<div class="edit">
<p>text2</p>
</div>

<div class="edit">
<p>text3</p>
</div>

</div><!-- id="sortable" -->
</body>
</html>

A 回答 (3件)

後から追加した要素にhoverイベントがアタッチされていないからです。


イベントつきの要素をcloneして追加する手があります。
こうします。

jQuery(".insert").click(function () {
var html= jQuery("#sortable .edit:first").clone(true);
jQuery(html).children("p").text("add-text");
jQuery("#sortable .edit:first").before(html);
});

もう一つの方法、
hoverを止めてくmouseover/mouseoutのイベントハンドラーを
作りなおして、予めlive(type, fn)で登録しておきます。
そうすれば、後から追加した要素にもイベントハンドラー
が有効になるはずです。(※この方法は、イベントバブリングとプロパゲーションに注意 する必要がありそうです。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

cloneを利用することで旨くいきました。
アタッチという言葉も知らない状態でした。
大変勉強になりました。

ありがとうございます。

お礼日時:2009/09/15 19:40

jQuery(document).ready(init);



function init( ) {
 jQuery('#sortable').hover(hover,out);
}

function hover( evt ) {
 if( evt.target.tagName=='A' )
  evt.target.style.backgroundColor = 'Yellow';
}
function out( evt ) {
if( evt.target.tagName=='A' )
  evt.target.style.backgroundColor = 'none';
}

# ほんのつい最近対策方法ここで言わなかったけ?俺の気のせい?
    • good
    • 0
この回答へのお礼

同様な質問がありましたでしょうか。気がつきませんでした。

googleで1日中検索しても解決策を見いだすことができませんでした。

回答ありがとうございます。
ソースを参考にさせて頂きます。

お礼日時:2009/09/15 19:43

editクラスへのホバー設定を最初にまとめて行っていますので、後から追加した要素には設定されていないので、当然ながらホバーの動作は起こりません。


ご希望の動作をしないのは、それが原因と推測されます。

>対象方法などあるでしょうか。
う~~ん。 対象方法はわかりませんが、対処方法なら…
そのままのロジックを前提とすれば、追加要素を生成したときに同じようにホバーのアクションを設定しておいてあげれば宜しいかと。

いちいち設定しないでやるのなら、全体のCSSで.edit:hoverを設定しておけば、クラス設定だけでも有効になるはず。
とはいうものの、IEだと<a>要素以外には:hoverってきかないんだっけ?(そんな記憶が…)
    • good
    • 0
この回答へのお礼

対処方法ですね。入力間違えました。m(_ _)m

表示の変化だけですとCSSでOKなのですが、この後、クリックした利などの制御を加えようと思っています。
質問では一番シンプルな状態で書きました。

ご提案ありがとうございます。

お礼日時:2009/09/15 19:38

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