gpt4 book ai didi

javascript - 为什么使用 addClass 时类名没有在 DOM 中更新?

转载 作者:行者123 更新时间:2023-12-03 10:15:08 25 4
gpt4 key购买 nike

我正在关注 Jon Duckett 写的《Javascript & jQuery》一书。在其中,我试图重新创建 this example project .

不起作用的部分是:(我的代码)

功能。更新计数器:

var updateCounter = function(){
var itemCount = $('ul li[class!=complete]').length;
$('#counter').text(itemCount);
}
updateCounter();

功能。检查项目是否完整:

var comp = function(){
var clickedItem = $(this)
if(clickedItem.hasClass('complete')){
clickedItem.animate({
opacity: 0.0
}, 500, 'swing', function(){
clickedItem.remove();
});
}
else{
$(this).addClass('complete');
var removedItem = $(this).clone();
$(this).remove();
list.append(removedItem);
}
updateCounter();
}

功能。添加新项目:

var addNewItem = function(e){
e.preventDefault();
var firstComplete = $('ul>.complete').first();
var newItem = $('#itemDescription:input:text').val();
if (firstComplete.length !==0){
firstComplete.before('<li>' + newItem + '</li>');
hideFormControls();
}
else{
list.append('<li>' + newItem + '</li>');
hideFormControls();
}
updateCounter();
}

我的方式和书本的区别在于,当向列表中添加新项目时,书本会输出

list.append('<li class=\"complete\">' + newItem + '</li>')

而我使用addClass。这样做不会更新计数器(它会更新,但会减少一)。我尝试将事件处理程序添加到列表中:

$('ul').on('DOMSubtreeModified', updateCounter); 

最佳答案

它无法正确更新,因为您在删除元素之前对元素进行计数。动画是异步的。

clickedItem.animate({  //this is asynchronous
opacity: 0.0
}, 500, 'swing', function(){ //this is called after updateCounter() was called
clickedItem.remove();
updateCounter(); //count after it is removed
});

关于javascript - 为什么使用 addClass 时类名没有在 DOM 中更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29920591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com