当页面第一次加载时,兄弟姐妹的 .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>