javascript - 需要加载 javascript 库还是只是等待它加载?

标签 javascript onload race-condition

当用户单击按钮时,我加载 JavaScript 库:

if (mylib.myfunction) {
    mylib.myfunction();
} else {
    var jsElt = document.createElement("script");
    body.head.appendChild(jsElt);
    jsElt.onload = function() { mylib.myfunction(); }
    jsElt.src = MYLIB_URL;
}

这当然有效,但有一个问题:如果用户在 onload 事件之前第二次单击,则 else 部分将再次执行。避免这种情况的最佳方法是什么?局部变量?还有别的吗?

更新:我要感谢@Suman Bogati 和@usernid 提出的禁用所单击按钮的建议。然而,该解决方案对我来说太有限了,因为它假设您可以从加载新库的代码访问该按钮。当然,情况并非总是如此。

就我而言,我无法使用此解决方案,因此我将使用全局变量。如果没有人有更好的主意。 ;-)

最佳答案

尝试

从脚本中禁用按钮

document.getElementById("btnId").disabled = true; 

从脚本启用按钮

document.getElementById("btnId").disabled = false; 

在你的代码中...

function methodName()
{

  document.getElementById("btnId").disabled = true; 
  if (mylib.myfunction) {
      mylib.myfunction();
      document.getElementById("btnId").disabled = false; 
  } else {
      var jsElt = document.createElement("script");
      body.head.appendChild(jsElt);
      jsElt.onload = function() { mylib.myfunction(); }
      jsElt.src = MYLIB_URL;
      document.getElementById("btnId").disabled = false; 
  }
}

html

<input type="button" id="btnId" value="CLICK" onclick="methodName()">

关于javascript - 需要加载 javascript 库还是只是等待它加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270137/

相关文章:

javascript - rails +jQuery : Get the Value of an Item Inside a Table to Use in a Prepend Function

javascript - 覆盖函数会删除它们吗?

JavaScript - 覆盖 HTMLImageElement(s) 的 .onload 原型(prototype)

go - 为什么这个程序中存在竞争条件?

python - 在 TKinter 中创建图像时可能出现竞争条件?

javascript - JQuery 查找和更改具有数据属性的所有元素的类

javascript - Bootstrap Collapse 组件的初始使用不起作用

javascript - 为什么我在 IE 中收到此 "null or not an object"错误?

javascript在 fiddle 中工作但不在我的html中工作

sql - Hibernate 如何在提交事务之前对乐观锁进行行版本检查