Javascript 未在DOMContentLoaded-JQuery之前定义$
js文件中的第一条语句是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);
$(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);
});
});