まず、#delete_comment_dialog
個の要素をページに含めることはできません。そのため、.delete_comment_dialog
に変更します。次に、コメント全体にクラスを追加し、closest
を使用してトップレベルのコメントラッパーに、find
を使用してダイアログに戻ります。あるいは、http://jsfiddle.net/ambiguous/VePZp/
、id
属性を持つ単一のダイアログを使用するid
秒を追加します。
$('span.delete_comment_button').click(function() {
$(this).closest('.comment')
.find('.delete_comment_dialog')
.dialog('open');
return false;
});
デモ:このような
<div class="comment">
blah blah blah blah
<span class="delete_comment_button">delete</span>
<div class="delete_comment_dialog">first dialog</div>
</div>
<div class="comment">
blah blah blah blah
<span class="delete_comment_button">delete</span>
<div class="delete_comment_dialog">second dialog</div>
</div>
そして、あなたのjQuery:HTMLは次のようになりますあなたのコメントは<div>
秒であり、コメントのid
をdata
属性などで削除します。たとえば、次のように
<div id="cmt1" class="comment">
blah blah blah blah
<span class="delete_comment_button">delete</span>
</div>
<div id="cmt2" class="comment">
blah blah blah blah
<span class="delete_comment_button">delete</span>
</div>
<div id="delete_comment_dialog">the only dialog</div>
そして:
$('#delete_comment_dialog').dialog({
autoOpen: false,
close: function() {
// 'close' handler just for demonstration purposes.
alert($('#delete_comment_dialog').data('kill-this'));
}
});
$('span.delete_comment_button').click(function() {
var $cmt = $(this).closest('.comment');
$('#delete_comment_dialog').data('kill-this', $cmt[0].id);
$('#delete_comment_dialog').dialog('open');
return false;
});
デモ:http://jsfiddle.net/ambiguous/M4QM6/
は、なぜあなたはただ1つのダイアログボックスを持っているか、その場でダイアログボックスを作成していけませんか?各ダイアログボックスでダイアログを作成する必要がないので、ページの読み込み時間を改善できます。これが適切な選択肢でない場合は、htmlを表示してください。 –