根据点击helloworld.js
的次数,似乎#load
多次加载。我这样说是因为当我查看Google Chromes开发人员工具网络标签时,我点击helloworld.js
时会显示#load
次。
$(document).ready(function() {
$("#load").click(function(){
$.getScript('helloworld.js', function() {
hello();
});
});
});
hello()
函数如下所示:
function hello(){
alert("hello");
}
是否可以检测helloworld.js
是否已加载?
因此,如果它尚未加载,请加载它,如果已加载,请不要加载它。
如果我单击#load
按钮4次,这就是开发者工具当前显示的内容:
答案 0 :(得分:10)
文件加载成功后设置标志。如果设置了flag,则再次跳过文件加载。
试试这段代码,
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();
});
});
});
答案 1 :(得分: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);
});
});
这样可以防止后续加载并避免使用全局
答案 2 :(得分:6)
另一种选择是让.getScript()
运行,但让它从浏览器的缓存中获取脚本,这样你就不会每次都重新加载它。
要实现此目的,请添加以下代码:
$.ajaxSetup({
cache: true
});
答案 3 :(得分:3)
你可以创建一个辅助函数:
var getScript = (function() {
var loadedFiles = {};
return function(filename, callback) {
if(loadedFiles[filename]) {
callback();
} else {
$.getScript(filename, function() {
loadedFiles[filename] = true;
callback();
});
}
};
})();