现在我花了一段时间将这个JavaScript放在一起,我已经到了jQuery在需要时添加到页面的阶段但任何后续脚本似乎都无法使用它,除非我已添加警报!!喜欢警报('Hello World');
我的想法是,警报功能设法让DOM以某种方式“重新加载”来更新DOM中的jQuery链接......我的理解肯定会落到这一点......
任何帮助将非常感谢,提前感谢
以下是我所拥有的内容,以下是将jQuery附加到客户端页面的“启动代码”部分,它通过第1点中提到的加载脚本进行外部链接。
if (typeof jQuery == 'undefined') {
//alert('No jQuery! Will attempt to load it now');
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(script);
tryReady = function(time_elapsed) {
if (typeof jQuery == "undefined") { // if jQuery isn't loaded yet...
if (time_elapsed <= 100000) { // and we havn't given up trying...
setTimeout("tryReady(" + (time_elapsed + 200) + ")", 200); // set a timer to check again in 200 ms.
} else {
alert('hello'); // If this isn't here, the subsequent scripts fail to access jQuery
}
} else {
//alert ("jQuery wasn't but now is loaded")
}
}
tryReady();
}
// Functions making use of jQuery go here...
答案 0 :(得分:1)
考虑使用onload
标记的script
属性。
if (typeof jQuery == 'undefined') {
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js";
script.onload = function(){
alert('voila');
}
document.getElementsByTagName('head')[0].appendChild(script);
}
答案 1 :(得分:0)
这确实看起来像Require.js的任务,而不是所有额外的复杂性......
它将抽象加载脚本的所有复杂性,并为您提供良好的依赖性解析方法。
修改:已更新以响应海报需求。
由于您确实在尝试使用上述方法,因此问题在于您正在使用异步编程构造(setTimeout
)以便稍后执行某些代码,但期望获得同步结果。
你的tryReady()
方法是在第一个if
内调用的(没有参数?为什么?)并立即返回,因为jQuery还没有准备好(大概是这样,除非你的基础结构真的非常非常快)和 //使用jQuery的函数在这里行被击中。
与此同时,setTimeout
将启动并尝试检查jQuery是否已加载。重复此过程,直到加载jQuery,这将触发您的alert("jQuery wasn't but now is loaded")
行。只是在那一刻,你知道jQuery真的被加载了(在else
语句中)。
如果您添加alert
,它会起作用,因为警报窗口是同步的并保持脚本执行,直到按下确定按钮。你这样做的时间可能足以让jQuery加载,因此你可以引用它。
另外,我真的不知道你要用time_elapsed
来实现什么,因为它从未用于任何有意义的事情......