8

似乎helloworld.js根据我单击的次数多次加载#load。我这样说是因为当我查看 Google Chrome 开发者工具网络选项卡时,它显示helloworld.js的次数与我单击的次数一样多#load

$(document).ready(function() {

    $("#load").click(function(){
        $.getScript('helloworld.js', function() {
            hello();
        });
    });

});

hello()函数如下所示:

function hello(){
    alert("hello");
}

是否可以检测是否helloworld.js已经加载?

因此,如果尚未加载,请加载它,如果已加载,则不要加载它。

#load如果我单击该按钮 4 次,这就是开发人员工具当前向我显示的内容:

在此处输入图像描述

4

4 回答 4

10

文件加载成功时设置一个标志。如果设置了标志,则再次跳过文件加载。

试试这个代码,

    var isLoaded = 0; //Set the flag OFF 

    $(document).ready(function() {

        $("#load").click(function(){
            if(isLoaded){ //If flag is ON then return false
                alert("File already loaded");
                return false;
            }
            $.getScript('helloworld.js', function() {
                isLoaded = 1; //Turn ON the flag
                hello();

            });
        });

    });
于 2012-11-14T15:41:16.970 回答
8

那么为什么不只像这样触发一次事件:

$("#load").one("click", function() {
   $load = $(this);
   $.getScript('helloworld.js', function() {
       hello();
       // bind hello to the click event of load for subsequent calls
       $load.on('click', hello); 
   });
});

这将防止后续加载并避免使用全局

于 2012-11-14T15:43:21.570 回答
6

另一种选择是让它.getScript()运行,但让它从浏览器的缓存中获取脚本,这样你就不会每次都重新加载它。

为此,请添加以下代码:

$.ajaxSetup({
    cache: true
});

这取自文档页面

于 2012-11-14T15:55:19.387 回答
3

您可以创建一个辅助函数:

var getScript = (function() {
  var loadedFiles = {};
  return function(filename, callback) {
    if(loadedFiles[filename]) {
      callback();
    } else {
      $.getScript(filename, function() {
        loadedFiles[filename] = true;
        callback();
      });
    }
  };
})();
于 2012-11-14T15:43:36.377 回答