javascript - 如何处理缓慢的 jQuery addClass 效果?
问题描述
我正在做一个页码的分页列表供用户选择页面。当用户单击任何页面时,它将首先运行 ajax 请求,然后加载数据以呈现页面。然后jQuery.addClass
运行以显示当前处于活动状态的页码,方法是添加“活动”类 - addClass('active')
。
问题是jQuery.addClass
效果有时但不是每次都有效(addClass
只是没有将类添加到所选元素)。我认为这是因为 DOM 加载得太快,jQuery 跟不上。即使我使用setTimeout
它有时仍然无法正常工作。我该如何处理?
$(() => {
//Moving page number and
//Set Active for moving page number
$(document).on("click", "a.btn-pagination", function(event){
$('#page_loading').css('display', ''); //--> display the page loading gif
var num = $(this).attr('data-page');
$('#result_container').load(base_url+'store/movePage/'
+ $(this).attr('data-page'));
setTimeout( () => {
updateButton();
$('.btn-pagination[data-page = ' + num + ']').show().addClass('active');
}, 300);
setTimeout( () => {
$('#page_loading').css('display', 'none'); //--> hide the page loading gif
}, 400);
});
});
function updateButton(){
let dateValue = $('#currentdate').text().trim();
if(dateValue >= maxdt){
$('#next_btn').html('<a class="btn-disable" style="color: gray;">Newer <i class="ace-icon fa fa-arrow-right"></i></a>');
}
else {
$('#next_btn').html('<a href="#" onclick="nextDate()">Newer <i class="ace-icon fa fa-arrow-right"></i></a>');
}
if(dateValue <= mindt){
$('#previous_btn').html('<a class="btn-disable" style="color: gray;"><i class="ace-icon fa fa-arrow-left"></i> Older</a>');
}
else {
$('#previous_btn').html('<a href="#" onclick="prevDate()"><i class="ace-icon fa fa-arrow-left"></i> Older</a>');
}
}
解决方案
使用异步操作时最好使用回调,因为它们确保回调在异步操作完成之前不会运行。
取而代之的是,
$('#result_container').load(base_url+'store/movePage/'
+ $(this).attr('data-page'));
使用回调作为负载的一部分
$('#result_container').load(base_url+'store/movePage/'
+ $(this).attr('data-page'), function(){
updateButton();
$('.btn-pagination[data-page = ' + num + ']').show().addClass('active');
});
然后删除这个:
updateButton();
$('.btn-pagination[data-page = ' + num + ']').show().addClass('active');
}, 300);
推荐阅读
- python - 根据条件用其他值替换特定轴
- java - 在一个问题连续正确回答 3 次后,我将如何将我的程序循环回到开头/并添加方差
- docker - 如何将 docker-compose 架构和单个项目分成不同的项目?
- symfony - 如何使用单独的密码实体来防止用户使用旧密码更新密码
- webpack - html-webpack-plugin 没有插入 options.title
- keras - 如何正确训练 VGG16 Keras
- javascript - 我的机器人加入并离开不和谐机器人 heroku
- python - DataFrame 采用列并集并保留找到第一个非 NaN 值
- excel - 从用户表单更新多个工作表
- webpack - SASS DevTools 未指向变量声明