ページが初めて読み込まれると、兄弟の.lengthはたとえば3を返します。次に、「クリック」イベントが投稿をトリガーし、成功すると兄弟が削除され、.lengthが再度呼び出されますが、3を返し続けます。
各兄弟は、同じループ内ではなく、ランダムな時間に「クリック」イベントを介して削除されることに注意してください。
例:(ここでは手書きですが、動作を説明する必要があります)
<ul id="un33k">
<li><a class="clicked" href="/link/1">Link 1</a></li>
<li><a class="clicked" href="/link/2">Link 2</a></li>
<li><a class="clicked" href="/link/3">Link 3</a></li>
<li><a class="clicked" href="/link/4">Link 4</a></li>
</ul>
$(document).ready(function(){
var total_li = $('#un33k').children().length; // 3 (test only)
$('a.clicked').click(function () {
var me = this;
$.post('somelink', {...}, function(data, status) { // assuming success
var new_total_li = $(me).closest('li').siblings().length; // 3, good
var parent = $(me).closest('li').parent() // can't hardcode id
$(me).closest('li').remove(); // assuming the clicked li is gone now
new_total_li = $(parent).children().length; // 3, but should be 2 now?
}, "json");
});
});
数分後にクリックしても、3が表示されます。なぜですか。
更新:実際のコードをここにコピーします:
この行は、削除された兄弟の数に関係なく同じ初期番号を示す原因( console.log($(me).closest('li')。siblings()。length )です。
<script>
$(document).ready(function(){
$('a.get2post').click(function () {
var me = this;
var url = $(me).attr('href');
if ($(me).hasClass('confirm')){
if(!window.confirm("Are you sure?")){
return false;
}
}
if ($(me).hasClass('deletion')){
var postdata = {ajax: 'true' };
$.post(url, postdata, function(data, status) {
if (status == 'success'){
$(me).closest('li').hide('slow', function(){ $(me).remove(); });
console.log($(me).closest('li').siblings().length) // problem
}
}, "json");
}
return false;
});
});
</script>