在点击上,以下内容被加载:
$.getScript('/javascripts/contacts.js');
Run Code Online (Sandbox Code Playgroud)
我怎么写一个说的话
如果上面的getScript已经加载了X,如果没有加载它,做Y ...?
谢谢
Mau*_*ord 14
var gotContacts = 0;
function getContacts(){
if (!gotContacts){
$.getScript('/javascripts/contacts.js', function() {
gotContacts = 1;
doSomethingWithContacts();
});
}else{
doSomethingWithContacts();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我的情况不同了.我使用菜单使用jquery将内容加载到div中.为了防止在标题部分中出现太多脚本,我使用.getscript仅在调用该链接时才加载文件.这是我提出的防止重复的解决方案:
首先,我创建一个负责加载脚本的函数.这是我网站上global.js文件的一部分,global.js文件被硬编码到标题中:
var loadedScripts=new Array();
function loadScriptFiles(scriptArray){
if($.isArray(scriptArray)){
$.each(scriptArray, function(intIndex, objValue){
if($.inArray(objValue, loadedScripts) < 0){
$.getScript(objValue, function(){
loadedScripts.push(objValue);
});
}
});
}
else{
if($.inArray(script, loadedScripts) < 0){
$.getScript(script, function(){
loadedScripts.push(objValue);
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
这需要两种类型的加载,可以是数组,也可以是单个脚本值.如果它是一个数组,它会循环遍历每个元素并加载它.如果它不是一个数组,那么它只会加载一个文件.你会在一分钟内看到那部分.
重要部分:请参阅我在全局范围内(函数外部)创建了一个名为loadedScripts的数组.因为这是global.js文件的一部分,所以它永远不会重新加载,可以从任何地方调用.但是出于我们的目的,我只是检查要加载的脚本名称是否已经在数组中使用:
if($.inArray(objValue, loadedScripts) < 0){
Run Code Online (Sandbox Code Playgroud)
因为如果找不到值,jquery inarray函数返回-1,我只会在值小于0时继续.其他任何意味着值都在数组中.
以下是调用要使用的函数的方法.将此代码放在将被调用的动态页面的任何位置(我将其放在顶部).
<script type="text/javascript">
var scriptArray=new Array();
scriptArray[0]="[REPLACE THIS WITH THE PATH TO THE JS FILE]";
scriptArray[1]="[REPLACE THIS WITH THE PATH TO THE JS FILE]";
loadScriptFiles(scriptArray);
</script>
Run Code Online (Sandbox Code Playgroud)
如果操作正确,您会发现它只会加载一次.
我创建了一个几乎完全符合你想要的插件:$.getScriptOnce().
如果您尝试将相同的脚本加载两次或更多次,则不会加载脚本并返回false.
但基本上,它定义了这个替代功能 $.getScript()
(function($) {
$.getScriptOnce = function(url, successhandler) {
if ($.getScriptOnce.loaded.indexOf(url) === -1) {
$.getScriptOnce.loaded.push(url);
if (successhandler === undefined) {
return $.getScript(url);
} else {
return $.getScript(url, function(script, textStatus, jqXHR) {
successhandler(script, textStatus, jqXHR);
});
}
} else {
return false;
}
};
$.getScriptOnce.loaded = [];
}(jQuery));
Run Code Online (Sandbox Code Playgroud)
然后简单地打电话 $.getScriptOnce('yourFile.js')
| 归档时间: |
|
| 查看次数: |
14359 次 |
| 最近记录: |