Javascript 如果单击按钮,jQuery将阻止重新加载
我有一个jQuery数据表,可以立即加载到READY上。之后,每隔30秒重新加载一次数据表。此功能正常运行 我添加了一个搜索功能,可以自动用新的搜索结果重新加载datatable。这部分功能也正常 我遇到的问题是,当我使用搜索功能时,会返回新的搜索结果。30秒后,新结果被清除,datatable将重新加载所有原始记录 以下是我目前正在尝试的:Javascript 如果单击按钮,jQuery将阻止重新加载,javascript,jquery,Javascript,Jquery,我有一个jQuery数据表,可以立即加载到READY上。之后,每隔30秒重新加载一次数据表。此功能正常运行 我添加了一个搜索功能,可以自动用新的搜索结果重新加载datatable。这部分功能也正常 我遇到的问题是,当我使用搜索功能时,会返回新的搜索结果。30秒后,新结果被清除,datatable将重新加载所有原始记录 以下是我目前正在尝试的: $(document).ready(function() { var searchCriteria = ""; displayBookings(s
$(document).ready(function()
{
var searchCriteria = "";
displayBookings(searchCriteria);
var idle = 0;
var idleInterval = setInterval(timer, 30000);
$(this).mousemove(function(e){idle = 0;});
$(this).keypress(function(e){idle = 0;});
function timer()
{
idle = idle + 1;
if(idle > 2)
{
displayBookings(searchCriteria);
console.log('table reloaded');
}
}
$('#searchPending').on('click', function()
{
var isPending = 'Y';
var searchCriteria = {
isPending: isPending
};
displayBookings(searchCriteria);
});
});
函数displayBookings()
采用搜索条件。如果searchCriteria为空,则会触发基本查询。显然,is searchCriteria包含参数,然后使用附加的WHERE子句触发相同的查询。我没有透露displayBookings()
的代码
如果单击了
#searchPending
按钮,我需要做的就是停止30秒的间隔。清除间隔,这样它将停止加载
clearInterval(idleInterval)
特别是在您的代码中:
$('#searchPending').on('click', function()
{
clearInterval(idleInterval)
var isPending = 'Y';
var searchCriteria = {
isPending: isPending
};
displayBookings(searchCriteria);
});
您可以使用最新的搜索条件刷新“刷新”(您的“计时器”功能),而不是启动和停止计时器间隔,因为您会遇到一些竞争条件。为此,只需将相同的对象传递到
displayBookings
函数中即可。例如
const search = { criteria: "" };
$(...).click(() => {
search.criteria = 'change it...';
displayBookings(search.criteria);
});
setInterval(() => displayBookings(search.criteria), 30000);
这样,如果发生刷新,它将使用最新的搜索条件。只需从第二个searchCriteria
中删除var
,即可实现相同的结果,只需对代码进行最小的更改。目前,在不删除var
的情况下,您的外部标准由您的内部标准执行
我在一篇评论中提到。我误读了代码,去Bouncing不是你想要的。相反,如果在某个阈值内没有任何用户活动,则只希望“刷新”。以下是您使用的方法的替代方案:
let lastInteraction = 0;
function interact() {
lastInteraction = Date.now();
}
$(this).mousemove(interact);
$(this).keypress(interact);
然后在刷新功能中:
if (Date.now() - lastInteraction > threshold) { ...
执行中央标准和修订的怠速检查:
$(document).ready(function() {
const idle = {
threshold: 1000,
lastInteraction: 0,
interact() {
idle.lastInteraction = Date.now();
},
isIdle() {
return Date.now() - idle.lastInteraction > idle.threshold;
}
};
const search = { criteria: "" };
$(this).mousemove(idle.interact);
$(this).keypress(idle.interact);
setInterval(() => {
if (idle.isIdle()) {
displayBookings(search.criteria);
}
}, 30000);
$('#searchPending').on('click', () => {
search.criteria = { isPending: 'Y' };
displayBookings(search.criteria);
});
displayBookings(search.criteria);
});
维基百科的文章链接到讨论了用键盘去抖动。这是相同的概念。如果您计划在用户键入时让displayBookings函数实时执行,则可以在displayBookings函数上使用去Bouncing。这将防止在短时间内发生太多HTTP请求。我将把它放在哪里?在按钮里面点击?@JohnBeasley是的,我只是编辑了一下来显示。当点击按钮时,它将清除间隔并停止刷新加载。这似乎就是我要寻找的。我甚至不知道clearInterval特性。谢谢,先生。除了CodeAt30的答案之外,为什么不简单地修改单击处理程序中的searchCriteria
,而不是声明一个新变量呢?使一些“全局”状态对象保存搜索条件。顺便说一句:您使用计时器所做的操作称为去抖动
。请您举一个您所指的例子好吗?我确实已经记下了这个问题的答案,但是我很想知道你们在说什么。另外,去Bouncing是好事还是坏事?我用一个“状态”给出了一个答案。我最初误读了你的代码。如果你好奇的话,尽管我在我的回答中提供了一个关于这一点的注释,但你并没有去Bouncing。