JQuery:延迟加载JQuery和'$ not defined'

cal*_*iph 3 javascript jquery

我无法解决这个问题以及我在网上发现的大量信息:

在我的项目中,JQuery加载了"defer".由于项目标准,我无法改变.

<script defer src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js'></script>
Run Code Online (Sandbox Code Playgroud)

现在我需要在页面中添加一些小函数(当前是内联的):

使用此设置,浏览器将尝试在jQuery加载之前执行内联脚本=>"未捕获的ReferenceError:$未定义"

<body>
...
...
<script>
  $("#city").change(function() {...some stuff...};
  $("#doctor").change(function() {...some stuff...};
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

什么是解决这个问题的聪明方法?

nov*_*ung 7

将其包装在内部window.onload,因此当所有内容都完全加载时,脚本将被执行.

window.onload = function () {
    $("#city").change(function() { /* ...some stuff... */ });
    $("#doctor").change(function() { /* ...some stuff... */ });
}
Run Code Online (Sandbox Code Playgroud)

window.onload来自MDN的解释:

load文件在文档加载过程结束时触发.此时,文档中的所有对象都在DOM中,并且所有图像,脚本,链接和子帧都已完成加载.

https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onload

试试这个例子:

window.onload = function () {
	$("#city").click(function() {
		alert('city');
	});
	$("#doctor").click(function() {
		alert('doctor');
	});
}
Run Code Online (Sandbox Code Playgroud)
<script defer src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js'></script>

<button id="city">City</button>
<button id="doctor">Doctor</button>
Run Code Online (Sandbox Code Playgroud)

  • 聚会有点晚了,但是使用 jquery 准备的文档不起作用。问题是 $ 在 jqueury 加载之前未定义,因此您不能使用它来等待它加载。我拿了你的代码片段,并用文档准备好替换了 window.onload ,并得到了与OP中完全相同的错误。不过,Window.onload 工作正常。 (2认同)