如何在异步加载的 HTML 元素之间创建信号量

2024-03-24

我在 HTML 页面中有一个出现多次的元素,并且运行相同的 JS。 问题是,我希望它只有在第一个运行它时才执行特定功能(他的兄弟姐妹从未运行过它)。

我需要信号量在它们之间同步。 我无法知道如何在 JS 中声明变量并以这种方式执行信号量。


有很多方法。

你需要立一个flag某处。在没有其他东西的情况下,你可以把它戴上window,但使用不太可能与其他名称冲突的名称。

那么 JavaScript 就非常简单了:

if (!window.myUniqueNameFlag) {
    window.myUniqueNameFlag = true;
    // Do your processing
}

但话又说回来,把东西穿上window如果你能避免它,那并不理想,尽管它是very常见做法。 (您在全局范围内声明的任何变量var1 是一个属性window,就像您在全局范围内声明的任何函数一样。)

如果您的函数已在全局范围内声明(因此已占用全局标识符/窗口属性),则可以这样做以避免创建第二个标识符。代替:

function foo() {
    // ...your processing...
}

Do this:

var foo = (function() {
    var flag = false;

    function foo() {
        if (!flag) {
            flag = true;
            // ...your processing...
        }
    }

    return foo;
})();

这看起来很复杂,但事实并非如此:它定义并立即调用一个匿名函数,在该函数中定义一个变量和一个嵌套函数,然后返回嵌套函数的引用并将其分配给foo多变的。您可以致电foo你会得到嵌套函数。嵌套函数有一个持久的参考 to the flag变量,因为它是一个变量的闭包 http://blog.niftysnippets.org/2008/02/closures-are-not-complicated.html,但其他人看不到它。这是完全私人的。

A third选项是只在函数对象本身上使用一个标志:

function foo() {
    if (!foo.flag) {
        foo.flag = true;
        // ...do your processing...
    }
 }

函数只是具有被调用能力的对象,因此您可以为其添加属性。


1 在全局范围内声明的变量let or const是全局变量,但不会成为属性window.

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

如何在异步加载的 HTML 元素之间创建信号量 的相关文章

  • 在 TCPDF 中设置背景颜色

    我已经手动设置了第一页的背景颜色 如下所示 pdf gt AddPage pdf gt SetFillColor 52 21 0 76 pdf gt Rect 0 0 pdf gt getPageWidth pdf gt getPageHe
  • 通知用户消息仍在输入中

    我正在使用 Laravel 5 6 7 Socket IO 和 vue js 我没有使用 Pusher 和 redis 下面是我的代码 用于向与我一对一聊天的用户发送消息 var url http localhost 6001 apps M
  • 来自 DataURL 的 Blob?

    Using FileReader s readAsDataURL 我可以将任意数据转换为数据 URL 有没有办法将数据 URL 转换回Blob使用内置浏览器 API 的实例 用户 Matt 一年前提出了以下代码 如何在javascript中
  • jQuery 的 css() 在应用于滚动事件时滞后

    我正在尝试实现一个简单的 固定标题 表 我知道这在理论上只能用 CSS 来完成 但是当涉及到 OSX Lion 及其消失的滚动条时 它效果不佳 所以我用 jQuery 来做 方法很简单 只有1 5行代码 inbox scroll funct
  • JQuery 动画文本

    找到简单 简单的动画文本是非常困难的 喜欢这个网站上的 内爆 http codecanyon net item jquery text animation full screen preview 233445 http codecanyon
  • 从未定义解构时避免错误

    可以说我有这个代码 const x y point Babel 会将其变成 var point point x point x y point y 这很好 但是如果点未定义怎么办 现在我得到一个错误 Cannot read property
  • 在 JavaScript 中比较表单中的两个数字

    当我尝试比较不同的数字时 数字发生变化 但文本部分保持不变 这只发生在较大 较小的情况下 而不会发生在 NaN 或相等的情况下 这是我的代码 function check var a document getElementById a va
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • 引入 V8 后,Google Apps 脚本无法为其他用户完全执行

    我编写了一个脚本 得到了这里好心人的大力帮助 该脚本使用 Google Sheets 脚本复制 Google Drive 上的文件夹 和内容 它运行了很长一段时间 但后来我启用了 V8 引擎 现在已禁用 问题是 它仍然适用于我 也许还有其他
  • 点击问题:动态生成的链接不触发点击功能

    下面是两个代码片段 由于某种原因什么也没有发生 但来自同一个 JS 文件的其他 jQuery 函数在带有 UL 的页面上执行得很好 这是在盯着我看吗 ul class paganation li 1 li li a href 2 a li
  • 捕获 XSS(跨站脚本)攻击的最佳正则表达式(Java 中)?

    杰夫实际上在净化 HTML http refactormycode com codes 333 sanitize html 但他的示例是用 C 编写的 而我实际上对 Java 版本更感兴趣 有人有更好的 Java 版本吗 他的示例是否足以直
  • 使用 JavaScript 的计时器

    我想使用java脚本实现计时器 我想随着间隔的变化而减少计时器 Example假设我的计时器从 500 开始 我想要根据级别减少计时器 例如1 一级定时器应减1 且递减速度应较慢 2 2级定时器应递减2 递减速度应为中等3 3级定时器应减3
  • 元素中优先考虑 ngclick 而非 nghref

    tl dr 如何强制 Angular 只执行 ngclick 指令 a 元素而不清空 删除href 我的网站在某些元素上有一些自定义行为 模式打开 位置栏更新等 但对于 SEO 索引我also需要它成为一个 a 元素与href包含有效链接的
  • Meteor.js 登录事件

    因此 我对 Meteor 框架和 JavaScript 总体来说还很陌生 但我正在使用该框架开发一个小项目 以尝试让自己达到标准 基本上我正在开发一个微博客网站 目前 用户可以通过多种服务登录 fb google 等 我通过插入所需 url
  • RTCDataChannel发送方法不发送数据

    我的 RTCDataChannel 遇到一个奇怪的问题 我正在对 WebRTC 进行一些研究 并且已经可以进行 WebRTC 音频 视频聊天 现在我想使用 RTCDataChannel 添加文本聊天和文件共享 我已经像这样创建了 RTCDa
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 如何在粘贴时获取文本区域输入字段的新值?

    我发现当我尝试从文本区域字段读取值时onpaste调用函数时 我得到字段的旧值 粘贴操作之前的值 而不是新值 粘贴操作之后的值 以下是此行为的演示 http jsfiddle net qsDnr http jsfiddle net qsDn
  • 在声明组件选择器时添加指令 - Angular 7

    我正在学习 Angular 并通过单击按钮动态创建组件 我正在尝试使用 Angular Material 的拖放功能来拖动这些创建的组件以对它们进行排序 我的基本组件 html 中有以下代码 div style margin 20px di
  • 在 Google Apps 脚本中的文本前插入换行符

    我需要在 Google 文档中的某些文本之前插入一些换行符 尝试过这种方法但出现错误 var body DocumentApp getActiveDocument getBody var pattern WORD 1 var found b
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne

随机推荐

  • 在 Windows 上更改 apache 的文档根不起作用

    我正在尝试更改本地 Windows 计算机上的 documentroot 以指向 htdocs 下面的子目录 我已经更改了 httpd conf 中的 DocumentRoot 位置以及目录位置 我已经重新启动了 Apache 但用 PHP
  • 为什么十六进制数会自动转换为十进制数?

    我正在开发一个Python小方法 它需要从另一个文件中读取代表键和值的字典 但我似乎遇到了我发送的数值表示的问题 例如 我的字典中的某些键如下所示 id dict val a 0x0000 val b 0x1000 但我注意到 当我尝试遍历
  • 如果目录不存在则创建

    我正在编写一个 PowerShell 脚本来创建多个目录 如果它们不存在 文件系统看起来与此类似 D D TopDirec SubDirec Project1 Revision1 Reports D TopDirec SubDirec Pr
  • @GenerateValue 和 @GenericGenerator 之间的区别

    有时我发现他们在一起 有时单独 其他时候他们似乎也做同样的事情 有什么不同 以下是三个例子 他们的做法有何不同 为什么我不能对所有这些都使用 GenerateValue 实施例1 Id GeneratedValue generator in
  • VueJS CKeditor5上传图片

    在 Vuejs 中使用 CKeditor5 上传图像时遇到问题 第一次尝试过简单上传适配器 https ckeditor com docs ckeditor5 latest features image upload simple uplo
  • Fluent NHibernate 主键约束命名约定

    有没有办法在 Fluent NHibernate 中为我的主键约束创建命名约定 我知道您可以命名外键约束 但似乎不可能命名主键约束 FNH 的 James Gregory 说 不 NHibernate 不支持这一点 因此我们也无法支持它 h
  • 有没有办法将自定义颜色存储在文件中并从 iOS 中的代码访问它们?

    我是一个 iOS 新手 但我有一些 Android 编程经验 我记得在 Android 中你可以在一个文件中定义一组自定义颜色颜色 xml您可以在代码中使用该文件 因此 每次必须在某处应用新颜色时 无需以编程方式定义新颜色 我的问题是 iO
  • 如何序列化List

    我有A班 B班和C班是A班的一部分 Class A Few Properties of Class A List
  • OpenGL4.5 - 绑定多个纹理和采样器

    我试图了解 OpenGL 4 5 中的纹理 纹理单元和采样器 我附上一张我想弄清楚的图片 我认为在我的示例中一切都是正确的 但我不太确定右侧带有问号的 1D 采样器 所以 我知道 OpenGL 提供了许多纹理单元 绑定点 可以在其中绑定纹理
  • 模型驱动架构值得吗?工具的最新技术水平如何?

    我们的商店经常遇到一个问题 即同一类别 实体有 3 或 4 种不同的表示形式 java 版本 xml 版本 hibernate 版本 json 版本 您明白了 显然这会产生维护问题 模型驱动架构可能不止于此 但我真正想要的是一个系统 它允许
  • 如何让 Resharper 转换回 foreach 循环

    Resharper 5 可以转换我的foreach循环到 Linq 查询 我喜欢哪个 但是 linq 比foreachloop 当我转换我的foreach语句到 linq 查询 我没有看到任何以其他方式返回的选项 有谁知道如何做到这一点 有
  • 如何忽略目录中除一个文件之外的所有内容

    回购结构 gitignore file1 file2 dir file3
  • 召唤辅助以获得更高种类的类型,而不参考原始类型

    我正在尝试将 Aux 模式与更高种类的类型一起使用 并且直到之后才必须指定更高种类类型的参数 这类似于所描述的SO问题here https stackoverflow com questions 52581986 aux pattern f
  • 如何从不同(子)目录中打包 java 源文件?

    考虑以下目录结构 source com mypackage A java extensions extension1 source com mypackage T java extensions extension2 source com
  • ActiveRecord:find_in_batches 的替代方案?

    我有一个加载数千个对象的查询 我想通过使用来驯服它find in batches Car includes member where engine gt 123 find in batches batch size 500 根据文档 我不能
  • Babel + Mocha 堆栈跟踪报告错误的行号

    使用 Babel 6 和 Mocha 时 堆栈跟踪报告错误的行号 我很确定这是因为转译添加了额外的代码 对我来说 这是 Babel 6 与 Babel 5 x 中的新行为 有人有关于如何在使用 Mocha 进行单元测试时解决此问题的解决方案
  • 向量化 R 的 dplyr 中每行的“日期范围的扩展”

    我在 R 中的 tibble 中有一个数据集 如下所示 A tibble 50 045 x 5 ref key start date end date
  • 如何使用 Robo 3T 从 MongoDB 导出 JSON

    我正在使用 Robo 3T 以前称为 RoboMongo 我将其连接到 MongoDB 我需要做的是 MongoDB 中有一个集合 我想从该集合中导出数据 以便将其保存到文件中 I used the interface to open th
  • 打印 rdlc 报告而不查看打印对话框

    我正在编写一个 POS 应用程序 需要经常打印发票 我需要将其直接发送到打印机 而不是查看打印对话框 使用 Reportviewer renderingcomplete 我可以避免看到报告 但我不知道如何避免看到打印对话框并在没有用户干预的
  • 如何在异步加载的 HTML 元素之间创建信号量

    我在 HTML 页面中有一个出现多次的元素 并且运行相同的 JS 问题是 我希望它只有在第一个运行它时才执行特定功能 他的兄弟姐妹从未运行过它 我需要信号量在它们之间同步 我无法知道如何在 JS 中声明变量并以这种方式执行信号量 有很多方法