这是一个非常简单的脚本,应该加载 jQuery。我可以在 Firebug 脚本选项卡中看到 jquery 正在加载,但是当我尝试使用它时出现“$ is not defined”错误。任何人都可以帮助我了解问题所在吗?
//function to add scripts
function include(file)
{
var script = document.createElement('script');
script.src = file;
script.type = 'text/javascript';
script.defer = true;
document.getElementsByTagName('head').item(0).appendChild(script);
}
//add jQuery
include('https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
//See if jQuery is working
$(document).ready(function() {
$('#internal').show();
})
////////////
//RETURNS: "$ is not defined $(document).ready(function() {"
奇怪的是,如果我不尝试在同一个脚本中使用 jQuery,而是加载另一个使用 jQuery 的 js 文件,它确实有效
//function to add scripts
function include(file)
{
var script = document.createElement('script');
script.src = file;
script.type = 'text/javascript';
script.defer = true;
document.getElementsByTagName('head').item(0).appendChild(script);
}
//add jQuery
include('https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
//add my custom script that wants to use jQuery
include('scripts/testScript.js')
测试脚本.js
$(document).ready(function() {
$('#external').show();
})
我很感激任何关于此的建议。
最佳答案
我猜是因为浏览器执行完当前文件后,只会执行你添加的脚本节点中的JavaScript。
浏览器将在一个线程中执行您当前的脚本。当它到达脚本末尾时,它会执行 DOM 中的下一个脚本。它无法停止运行一个脚本以跳转到下一个脚本。
您可能想看看 Google 的 JavaScript loader .工作方式是告诉它加载外部 js 文件,并注册一个回调以在加载该文件时执行。
您可以使用回调来实现,因为回调中的代码只会在浏览器执行完当前文件并移至下一个文件后执行。不过,您不能做的是让浏览器动态地从一个 js 文件切换到另一个 js 文件(即,当它第一次执行文件的内容时)。
关于javascript - 在 Javascript ( js ) 文件中加载的 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227909/