Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未在DOMContentLoaded-JQuery之前定义$_Javascript_Jquery_Addeventlistener_Domcontentloaded - Fatal编程技术网

Javascript 未在DOMContentLoaded-JQuery之前定义$

Javascript 未在DOMContentLoaded-JQuery之前定义$,javascript,jquery,addeventlistener,domcontentloaded,Javascript,Jquery,Addeventlistener,Domcontentloaded,js文件中的第一条语句是 $(document).on("DOMContentLoaded", function (event) { $(document.body).on('beforeinsert', onBeforeInsert); $(document.body).on('afterinsert', onAfterInsert); $(document.body).on('wait', onWait); $(window).on('load', onLoad);

js文件中的第一条语句是

$(document).on("DOMContentLoaded", function (event) {
   $(document.body).on('beforeinsert', onBeforeInsert);
   $(document.body).on('afterinsert', onAfterInsert);
   $(document.body).on('wait', onWait);
   $(window).on('load', onLoad);
});
但当我使用firebug时,它告诉我“$未定义”。在文件的其他地方,一切都按预期进行。事实上如果我把第一行改成

document.addEventListener("DOMContentLoaded", function (event) {

一切正常。我不想这样做,因为我希望能够获得跨浏览器兼容性。

您会收到错误消息,因为您的脚本在定义
$
之前运行


要修复此问题,请确保在运行该脚本之前加载了jQuery。

听起来您在尝试使用jQuery之前没有包含jQuery JS文件。请记住,浏览器从上到下呈现页面,因此将对Jquery JS文件的引用添加到页面顶部。

在加载Jquery之前,您的JS正在运行。尝试:

1-在定义此脚本之前,在页眉处引用jquery

2-使用$([…]):


该代码是否位于导入jQuery的
标记之后?这不会解决您的问题,只需使用
$(document).ready(函数(){})
而不是查找
DOMContentLoaded
事件-它将更兼容browsersnope,并修复了我的问题issue@karthikr我认为他的意思是使用
$(document)。ready
而不是收听
$(document)
,来处理
DOMContentLoaded
事件,这是正确的。@karthikr我不知道你的意思。如果此代码位于
中,将找不到
文档.body
,它应该使用
.ready()
等待DOM就绪。尽管如此,当jQuery以更可靠的方式为您执行时,监听
DOMContentLoaded
事件是愚蠢的。如果代码在
中,那么等待DOM就绪无论如何都是不必要的,除非OP需要在调用任何新绑定事件之前确保DOM就绪。对jQuery库的引用不需要(也不应该)在页面顶部,在任何需要jQuery.or的脚本之前,将其添加到底部,但确保需要它的任何东西都在后面。如果它位于底部,您甚至不需要DOMContentLoaded事件侦听器。
$(function() {
    $(document).on("DOMContentLoaded", function (event) {
       $(document.body).on('beforeinsert', onBeforeInsert);
       $(document.body).on('afterinsert', onAfterInsert);
       $(document.body).on('wait', onWait);
       $(window).on('load', onLoad);
    });
});