一段JS代码,在在<script>标签内好用,放在单独文件(.js)里就不好用了

<strong id="syhw"></strong>
<script>
var hours =  (new Date()).getHours();
var syhw1 = document.getElementById("syhw");
if(hours<10&&hours>=8){
    syhw1.innerHTML="13";

}
else if(hours<12&&hours>=10)
{//预约剩余10
    syhw1.innerHTML="10";
}
else if(hours<16&&hours>=12)
{//预约剩余7
    syhw1.innerHTML="7";

}
else
{
syhw1.innerHTML="5";
};
</script>

把这端放到js里面就不起作用了怎么办,难道必须用jq写吗

阅读 3.8k
6 个回答

有什么问题?我直接把你的代码分开在单独的js中也是没问题的。

test.html

<!DOCTYPE html>
<html>
<head>
    <title>test</title>
</head>
<body>
    <strong id="syhw"></strong>
    <script src='test.js'></script>
</body>
</html>

test.js

var hours =  (new Date()).getHours();
var syhw1 = document.getElementById("syhw");

if(hours<10&&hours>=8) {
    syhw1.innerHTML="13";

} else if(hours<12&&hours>=10) {//预约剩余10
    syhw1.innerHTML="10";
} else if(hours<16&&hours>=12) {//预约剩余7
    syhw1.innerHTML="7";
} else {
    syhw1.innerHTML="5";
}

你把js分离出去了,然后没有在当前页面中调用,所以就不好用喽

这里应该保证 javascript 代码是在DOM加载完后再执行

要看你把引用外部脚本的代码放在head里面的还是在获取的DOM元素之后。

放在head元素里面使用,请使用defer属性。例如:

<script src="test.js" defer="defer"></script>

注意:这个只有在IE10以下版本才有效

放在DOM元素之后。例如:

<strong id="syhw"></strong>
<script src='test.js'></script>

或者放body元素的最后面

这里最关键的一点就是外部脚本要获取DOM对象应该在DOM加载完成之后才能获取到

你可以把 script 标签放到页面的最底部。

这样可以保证加载完DOM后才开始执行JS

首先,代码是没有问题的,放入单独文件里不管用可能是如下原因:、

  1. 你没有在html内引用js文件,或者文件名写错。

  2. 要再DOM就绪后才能获取DOM元素。

<strong id="syhw"></strong>
<script src="js.js"></script>

<script src="js.js"></script>
<strong id="syhw"></strong>

是不同的,第二种情况会报错。
有以下解决方法

window.onload = function(){// 文档就绪
    //你的js代码
}

或者

document.addEventListener("DOMContentLoaded", function(event) {// DOM就绪
    //你的js代码
});

还有就是daves2009答主说的,为script加defer属性

<strong id="syhw"></strong>
<script src="js.js" defer="defer"></script><!-- 文档下载但异步执行 -->
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题