JQuery 等待 x 秒。调用函数之前的不活动状态

发布于 2024-12-09 15:36:14 字数 187 浏览 1 评论 0原文

我有一个包含多个按钮、滑块等的表单,当单击、拖动等时,它们都会触发主要的 ajax 定价功能。通常会在短时间内连续多次单击一个按钮(例如,用于增加值的 + 按钮) )。

我希望 JQuery 在最后一个触发事件完成后等待 1 秒再执行,而不是每次都调用主 ajax 函数。换句话说,如果函数被触发<自上次触发以来已过去 1 秒...等待。

I have a form with multiple buttons, sliders, etc. that all trigger a main ajax pricing function when clicked, dragged, etc. Often a button is clicked multiple times consecutively in a short amount of time (e.g. a + button to increase a value).

Instead of calling the main ajax function each time, I would like JQuery to wait for 1 sec after the LAST trigger event is done before executing. In other words, if the function is triggered < 1s since the last trigger... wait.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酸甜透明夹心 2024-12-16 15:36:14

每次发生变化时,我都会调用 setTimeout ,并将超时设置为 1000 毫秒。存储 setTimeout 调用返回的值,如果在 setTimeout 调用触发其回调之前发生更改,则取消 setTimeout 并启动另一个 setTimeout。

var priceAdjustmentTimeout;
function somethingChanged() {
  if (priceAdjustment) {
    clearTimeout(priceAdjustmentTimeout);
  }
  priceAdjustmentTimeout = setTimeout(doPriceAdjustment, 1000);
}

function doPriceAdjustment() { 
  priceAdjustmentTimeout = null;
  /* do stuff here */
}

I would do a setTimeout call each time something changes, and set the timeout to 1000 ms. Store the returned value from the setTimeout call, and if a change occurs before the setTimeout call fires its callback, cancel the setTimeout and start another one.

var priceAdjustmentTimeout;
function somethingChanged() {
  if (priceAdjustment) {
    clearTimeout(priceAdjustmentTimeout);
  }
  priceAdjustmentTimeout = setTimeout(doPriceAdjustment, 1000);
}

function doPriceAdjustment() { 
  priceAdjustmentTimeout = null;
  /* do stuff here */
}
久而酒知 2024-12-16 15:36:14

您可以使用布尔变量作为标志并使用 setTimeout 来实现此目的。它可能看起来像这样。

var wait = false;
$('#button').click(
     function() {
         if(!wait) {
             //run code here
             wait = true;
         } else {
           var t = setTimeout('some code here ending with `wait = false;`',1000);
        }
     }
);

You can achieve this using a boolean variable as a flag, and using setTimeout. It might look like something like this.

var wait = false;
$('#button').click(
     function() {
         if(!wait) {
             //run code here
             wait = true;
         } else {
           var t = setTimeout('some code here ending with `wait = false;`',1000);
        }
     }
);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文