我的Jquery丢了吗?

时间:2014-01-30 21:14:37

标签: jquery

<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(匿名   功能)

5 个答案:

答案 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的诚信!