这可能是一个愚蠢的初学者的问题,但它让我发疯。简化后,代码为:
我有一个index.php,在内联脚本中(位于head元素中),定义了一些JS函数。
<script type="text/javascript">
$(function(){
// other code
var popup = function(message,color){
$(".title").css({"color": "beige" });
$(".popup_alert").css({"background-color": color});
$( ".popup_alert" ).append(message);
$(".popup_alert").removeClass("offscreen").delay(800).queue(function(){
$(this).addClass("offscreen").dequeue();
$(this).empty();
$(".title").css({"color": "#444" });
});
};
};
</script>
在<body>
的最底部,我正在加载一个外部JS文件,其中发生了一些JQuery:
<script src="ajaxToDB.js" type="text/javascript"></script>
JQuery不是问题。它已加载,此外部文件中的其他功能正在运行。
在这个链接文件中,我无法调用index.php中定义的函数。
popup("test",orange);
将产生控制台错误“Uncaught ReferenceError:popup is not defined”
这是正常的吗?我已经将ajaxToDB.js中的所有内容都包装在了一个 $(function(){...});我读到这会强制页面首先加载,但无济于事......
我忽略了什么愚蠢的细节?!
答案 0 :(得分:0)
感谢@ guest271314,我在JS结构中吸取了教训:
以前,我已将整个代码包装在主文档的脚本标记内$(function(){};
这个我认为是“必要的”,因为脚本标记放在head元素内,否则文档不会已经准备好了。
当使用另一个外部JS文件时,这种技术现在阻止外部代码引用内联声明的函数,因为这些函数现在“等待”文档的其余部分准备就绪,包括外部文件(然后引用到一个尚未申报/“未决”的主要功能)。
哇。
删除$(function(){};
换行并将脚本元素移动到正文的底部解决了问题。我想这应该是第一位的...... 升级