如何保留setTimeout参数值直到执行?

2024-03-10

我有一些在按键时执行的代码,并在用户键入时将数据保存到数据库中。

我添加了一个 setTimeout 函数,前面有一个clearTimeout,因此并非用户输入的每个字符都会发送 Ajax 请求来保存数据。

虽然 setTimeout 对于一个输入字段效果很好,但如果用户决定快速切换输入字段(在 setTimeout 延迟结束之前),传递给 callSomeAjax 的参数会在函数执行之前发生变化。

正在发生的事情的简化版本...

var a = 1; //some user data

//function to call ajax script to save data to database
function callSomeAjax(a)
{
   console.log(a);
}

setTimeout(function(){callSomeAjax(a)},1000); //executes callSomeAjax after 1 second delay

a=3; //change user data before callSomeAjax executes

// Result of console.log is 3, not 1 like I want it to be...

小提琴上的代码 http://jsfiddle.net/U59Hv/

有任何想法吗?


较新的浏览器将允许您将参数传递给setTimeout,并在回调中检索它。

setTimeout(function(a){
    return callSomeAjax(a);
}, 1000, a);

或者你可以将它绑定到函数

setTimeout(function(a){
    return callSomeAjax(a);
}.bind(null, a), 1000);

除此之外,您还需要创建setTimeout使用该值在新范围中回调。

function callbackWithValue(a) {
    return function() {
        return callSomeAjax(a);
    };
}

setTimeout(callbackWithValue(a), 1000);

或者,如果您已经拥有了该功能,并且没有其他需要传递的内容,那么您可以使其更加通用......

function callbackWithValue(fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        return fn.apply(null, args);
    };
}

setTimeout(callbackWithValue(callSomeAjax, a), 1000);

最后一个展示了一个.bind()功能。它可以进一步扩展以允许绑定this以及在绑定参数之后传递的附加参数的串联。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保留setTimeout参数值直到执行? 的相关文章

  • jQuery .wrap() 不环绕克隆元素

    function extend notify function options duration var defaults inline true href html var options extend defaults options
  • 如何在 html 5 画布上旋转单个对象?

    我试图弄清楚如何在 html 5 画布上旋转单个对象 例如 http screencast com t NTQ5M2E3Mzct http screencast com t NTQ5M2E3Mzct 我希望每一张卡都能以不同的角度旋转 到目
  • 缩小 ASP.NET 生成的 Javascript 的最佳方法是什么?

    在 ASP NET 3 5 运行时缩小 ASP NET 生成的 Javascript 例如由 webresource axd 提供的 Javascript 的最佳方法是什么 我尝试使用Mb压缩 http mbcompression code
  • 使用通过 (document.getElementById('ID')) 添加到数组的元素

    为什么这段代码不起作用 var all obj element new Array all obj element 0 document getElementById Img3 alert all obj element 0 style w
  • WebPack 源映射令人困惑(重复文件)

    我决定在我今天正在启动的一个新项目上尝试 WebPack 并且我从源映射中得到了非常奇怪的行为 我在文档中找不到任何相关信息 在浏览 StackOverflow 时也找不到其他人遇到此问题 我目前正在查看由以下公司制作的 HelloWorl
  • AngularJS 和 Apiary.IO - 无法读取任何响应标头?

    我使用 Apiary io 模拟我的 API 但不知怎的 我无法使用 angularJS 从响应对象中读取任何标头 我确信我至少通过检查 firebug 正确设置了 Content Type application json Angular
  • 动态添加jinja模板

    我有一个 jinja 模板 它是一组 div 标签内的唯一内容 div include temppage html div 当我按下按钮时 我想用其他内容替换标签之间的所有内容 我希望用另一个 jinja 模板 include realpa
  • 移动浏览器上的 Javascript / jQuery 页面更改事件

    我正在设计一个移动网站 同时考虑所有领先的浏览器 Safari Chrome Dolphin Opera 我想显示一个 正在加载 元素页面导航 更改 请求新页面 我无法在锚标签上使用点击事件 因为有很多锚标签存在preventDefault
  • 如何使用 CSS 或 javascript 创建圆角

    复制 使用 CSS 创建圆角的最佳方法是什么 https stackoverflow com questions 7089 what is the best way to create rounded corners using css 7
  • Google javascript 登录 api:无法离线访问

    我正在尝试为服务器端应用程序实现 Google 登录 如 Google 文档中所示 服务器端应用程序的 Google 登录 https developers google com identity sign in web server si
  • 如何在 Asp.Net MVC 上实现客户端 Ajax 登录(Asp.Net Webforms 解决方案的链接位于此处)

    我正在尝试在 Asp Net MVC 上实现客户端 ajax 登录 我以前在 WebForms 上设置得很好 但现在我已经转向 MVC 这给我带来了一些麻烦 如果您想要有关 Asp Net Webforms 的客户端 Ajax 登录的教程
  • 角度引导手风琴数据绑定问题

    我有 2 个相同型号的下拉菜单 一个位于手风琴内部 另一个位于外部 外部下拉菜单在 2 路数据绑定方面工作良好 但手风琴内部的下拉菜单似乎只有 1 路绑定 换句话说 在 UI 中选择并不会设置模型值 我找到了一个建议here https s
  • Node.js 循环发送 http 请求

    我实际上遇到了使用 node js 执行的 javascript 代码的问题 我需要循环发送http请求到远程服务器 我在代码中设置了www google ca 这是我的代码 var http require http var option
  • 如何使用 Eclipse 作为 Javascript IDE?

    我从官方下载页面下载了 eclipse Javascript IDE 但是 当我启动应用程序时 它显示 必须提供 Java 运行时环境或 Java 开发工具包才能运行 eclipse 我已经有一个运行良好的 eclipse 的 java I
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • AngularJS:ng-show 与 display:none

    我有一个用例 我必须使用 CSS 默认隐藏 HTML 元素 如下所示 HTML div class item div CSS item display none 但是 我需要在页面加载后使用 ng show 切换元素的可见性 如下所示 di
  • jQuery 和所有 .js 文件无法在本地运行,只能在外部运行

    我有一个奇怪的问题 我正在编写一个网站 包括 jQuery 和一些插件 它们存储在 js 文件夹中 当我尝试通过浏览器 jQuery 打开它时 插件和所有自定义脚本都不起作用 也许这与我的代码有关 但不这么认为 当然 当我在外部包含 jQu
  • JQuery 验证不起作用

    我有一种表单 其中一个输入类型的值为 名字 但这可以在 onfocus 函数上更改我想验证此输入字段 如果它为空白或 名字 我有两个 jQuery 文件jquery 1 4 2 min js jquery validate pack js
  • Array.indexOf 如何比 Array.some 更高效

    这个问题的灵感来自于这个问题的竞争答案 具有多个参数的indexOf https stackoverflow com questions 39000151 indexof with multiple arguments 用户想知道一种有效的
  • 使用 Lodash 循环 JavaScript 对象中的属性

    是否可以循环访问 JavaScript 对象中的属性 例如 我有一个 JavaScript 对象定义如下 myObject options property1 value 1 property2 value 2 属性将动态添加到该对象 有没

随机推荐

  • 检查 iOS 上是否安装了配置文件

    我正在尝试检查 iOS 设备上是否安装了 mobileconfig 文件 我尝试过此链接描述的方法http blog markhorgan com p 701 http blog markhorgan com p 701 但我失败了 也许有
  • 通过java列出weblogic中的所有用户

    有谁知道如何在java中列出所有weblogic用户 例如 安全领域有 5 个用户 我想获取所有用户 我该怎么做 这很容易 为了将来参考 如果您想查找诸如 我如何使用 weblogic 和 Java 做 X 之类的内容 请使用JMX在你的谷
  • IntelliJ IDEA 中的 Java 项目文件夹结构

    IntelliJ IDEA 中 Java 项目可接受的文件夹结构是什么 多个来源 像这样 https stackoverflow com a 28161314 4490400 建议采用以下结构 idea src main java com
  • svg:svg 是什么意思?

    这是什么意思 append svg svg 我在 HTML 和 D3 代码中看到了它 是否添加了SVG插件 在 XHTML 代码中 可以使用命名空间来区分网页中包含的其他基于 XML 的语言 这里 命名空间 svg 用在标签 svg 之前
  • 使用 SWIG 将 C 结构体数组访问到 Python

    我尝试从 Python 调用现有的 C 代码 C代码定义了一个结构体B包含一个结构体数组As C 代码还定义了一个函数 该函数在调用时将值放入结构中 我可以访问数组成员变量 但它不是列表 或支持索引的东西 相反 我得到的是一个代理对象B I
  • jQuery Closest() 不适合我(或者我不为它工作)

    鉴于这个 jQuery div MvcFieldWrapper input focus function this closest label MvcDynamicFieldError fadeOut 并给出这个 HTML div clas
  • R:箱线图 - 如何向下移动 x 轴标签?

    RGR Treatment Geno boxplot fit lt aov Total RGR Treatment Geno data For R summary fit t lt TukeyHSD fit t boxplot Total
  • 用razor显示编码的html

    我将编码的 HTML 存储在数据库中 我可以正确显示它的唯一方法是 div class content MvcHtmlString Create HttpUtility HtmlDecode Model Content div 它很丑 有没
  • 使用Python将海量数据批量插入SQLite

    我读到了这个 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2887878 importing a csv file into a sqlite3 d
  • 如何使用 ruby​​ 将图像文件转换为字节数组

    我需要将图像作为字节数组传递到 NET SOAP Web 服务 谁能举例说明如何使用 ruby 将上传的图像文件转换为字节数组 如果我正确理解您的问题 您将获得某种格式的图像 例如 jpeg 或 png 但您需要像素数组才能发送到 SOAP
  • 在带有选项卡的 Winforms 的模型视图演示器中应该使用多少个演示器?

    我有一个带有与业务实体相关的选项卡的表单 例如一个人有传记数据 地址数据等 每个选项卡处理一类个人数据的输入 编辑 并且每个选项卡可以独立保存 应该为所有选项卡使用一名演示者 还是每个选项卡使用一名演示者 还可能有一个主选项卡 它可以导航到
  • 出现 Axios 错误:拨打大量电话时连接 ETIMEDOUT

    从我的 Azure Function 进行大量调用时出现此错误 这个错误是什么意思 如何排除故障 我猜我的 TCP 套接字用完了 我真的不知道如何在功能应用程序菜单中检查它 不过 我检查了 Azure Maps API 的日志 没有错误或掉
  • git 中带有子模块的浅克隆,如何使用指向提交而不是最新提交? [复制]

    这个问题在这里已经有答案了 我知道可以使用浅层子模块 depth选项与git submodule update 但是 如果我跑 git submodule update init recursive depth 1 在我的带有多个子模块的项
  • 如何更改动态 SQL 中的序列?

    我正在尝试创建一个脚本来将数据从一个数据库迁移到另一个数据库 我当前无法做的一件事是将序列的 nextval 设置为另一个数据库中序列的 nextval 我从 user sequences 中得到了值的差异 并生成了以下动态 SQL 语句
  • 如何从 NSArray 中选择 UIImgeView

    I have UIImageView用作可拖动对象 它们位于NSArray所以 当拖动它们时它们工作得很好 但我想要的是当我拖动它们并完成拖动方法而不是将图像放在UIImageView我只想在拖动完成时将其替换为自定义图像 所以我的问题是如
  • 具有相同高度的 SwiftUI HStack 元素

    我希望两个按钮具有相同的高度 类似于Equal HeightUIKit 中的约束 不想指定框架 让 SwiftUI 处理它 但 HStack 中的元素应该具有相同的高度 按钮应具有相同的宽度和高度 并适应较长的文本并增加其框架大小 两个按钮
  • AssemblyInstaller 中的服务类型

    我想通过编程方式安装 Windows 服务example https stackoverflow com questions 1195478 how to make a net windows service start right aft
  • 在广播接收器中检测 USB - 我缺少什么?

    我的代码遗漏了一些东西 需要你的眼睛来定位 我创建了一个 USBOnReciever 广播接收器 public class USBOnReceiver extends BroadcastReceiver Override public vo
  • wc_countries - 国家选择下拉菜单 - woocommerce

    我正在努力设置一个带有默认 WooCommerce 国家和州选择下拉列表的表单 基本上 我想显示国家 地区选择 然后根据国家 地区选择显示州选择 因此 如果用户选择英国 则会显示包含州选择的新下拉列表 我到目前为止
  • 如何保留setTimeout参数值直到执行?

    我有一些在按键时执行的代码 并在用户键入时将数据保存到数据库中 我添加了一个 setTimeout 函数 前面有一个clearTimeout 因此并非用户输入的每个字符都会发送 Ajax 请求来保存数据 虽然 setTimeout 对于一个