2012/08/09
下記のようなHTMLソースがあるとします。
<div class="clone">
<button>button</button>
<input>
</div>
ボタンをクリックしたら、となりのテキストボックスの値をアラートで表示するようにイベントを設定します。
これを、イベントの挙動も含めて正しく複製するにはどうしたらいいでしょう?
"clone(true)"でイベントも複製するのなら、そのイベントの中で使う要素は
すべて"this"から辿って指定しなければなりません。
$('.clone button').click(function() {
alert($(this).parent().children('input').val());
});
(成功) ボタンと同じ位置のテキストボックスの値を参照します。
var p1 = $('.clone'); $(p1).children('button').click(function() { alert($(p1).children('input').val()); });(失敗) 1番目のテキストボックスの値を参照し続けます。
(function($) {
$.fn.click2 = function() {
return this.each(function() {
var p2 = this;
$(p2).children('button').click(function() {
alert($(p2).children('input').val());
});
});
};
})(jQuery);
$('.clone').click2();
(失敗) 1番目のテキストボックスの値を参照し続けます。