<script type="text/javascript">
window.onload = function () {
if (window.jQuery) {
alert($(".Dollar").html());
} else {
// jQuery is not loaded
alert("Doesn't Work");
}
}
alert($(".Dollar").html());
</script>
由于某种原因,第一个警报起作用,第二个警报崩溃。
未捕获的ReferenceError:$未定义MyPage:50(匿名 功能)
答案 0 :(得分:2)
这是因为,在加载dom之后运行window.onload(并且已经加载了jquery脚本文件)。在浏览器有时间加载jquery脚本之前,立即运行第二个警报($ ...)。
答案 1 :(得分:1)
仔细检查您是否正在加载另一个覆盖$
全局变量的库。
答案 2 :(得分:1)
您收到的错误消息表明,在您使用$ .noConflict的那段代码和onload事件之间有一段时间。它可能看起来像这样:
<script src="jquery.js"></script>
<script type="text/javascript">
window.onload = function () {
if (window.jQuery) {
alert($(".Dollar").html());
} else {
// jQuery is not loaded
alert("Doesn't Work");
}
}
alert($(".Dollar").html());
</script>
<script src="someotherlibrary.js"></script>
someotherlibrary.js
里面有这个地方:
var someVar = $.noConflict();
您正在发生的事情是绑定到onload事件,然后触发脚本标记底部的警报,这不会因为$ === jQuery
而出错,但是,包含的下一个脚本会导致{ {1}},导致onload处理程序失败。一个快速测试来证明这一点就是在onload处理程序中简单地用$ === undefined
替换alert($(".Dollar").html());
。
答案 3 :(得分:0)
正如vishahvkt已经说过的那样,onload-event将在整个DOM(包含JQuery)完全加载后触发。
onload-function之外的警报将在加载后立即执行。
因此,在处理此警报时,JQuery可能还没有准备好。即使它是:您的类.Dollar
的元素将不存在(假设它低于您脚本标记)。
尝试在页面末尾创建第二个脚本标记,然后将警报放在那里。如果这是原因,那么它应该适用。
答案 4 :(得分:0)
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
在我的默认模板页面的末尾(页脚)声明。
我在呈现脚本之前调用了JQuery。
window.onload
等待整个页面加载,尽管脚本定位不佳。
这就是第一个alert($(".Dollar").html());
工作的原因。
但是在呈现Jquery之前抛弃alert($(".Dollar").html());
!
感谢所有指出我正确方向的人!以及KevinB的诚信!