![](/img/trans.png)
[英]JavaScript - How can I run the javascript in all my html rows
[英]How can I run JavaScript function in my HTML
我在 JS 代码中写了一个 function,我想从 HTML 运行它,但是当我运行该站点时,我没有看到任何反应。
我将向您展示 html 代码和 js 代码的示例。
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="test.js">
<script src="test.js"></script>
</head>
<body onload="add()">
<p id="add2"></p>
</body>
</html>
这里开始JS代码
function add(a,b,c,d) {
return a + b + c + d;
}
document.getElementById("add2").innerHTML = add(5,10,15,20);
我希望我写得很清楚,有人会告诉我,我做错了什么?
您的 JavaScript 代码位于head
中,位于body
和其他所有内容之前,因此 JavaScript 在创建p
元素之前运行(html 逐行运行)。 要解决此问题,您可以尝试将 JavaScript 放在文档末尾,例如在body
之后。
当浏览器加载 HTML 页面时,它会从上到下读取您的 HTML。
所以排序很重要。
当然也有复杂性。 我在这里不是在谈论延迟或异步脚本。 但是从上到下的简化有助于我们了解您的问题。
您的脚本位于test.js
中,因此它将在 [body] 准备好之前加载并运行。
但是test.js
有这一行:
document.getElementById("add2").innerHTML = add(5,10,15,20);
此行不在 function 内,因此浏览器将尝试立即运行它。
对add()
的调用将起作用,因为它已在文件中声明。 但是document.getElementById("add2")
不会,因为它是访问[body]中以下HTML的指令:
<p id="add2"></p>
但是 [body] 还没有被“读取”,所以 JavaScript DOM API 不知道它。
但是,您已经使用 [body] 标记的onload
属性部分解决了问题。 您刚刚使用了错误的 function 。
该onload
是在 [body] 被完全读取后运行 function 的指令。 因此,如果您将document.getElementById
行更改为 function 内:
function runWhenBodyHasLoaded () {
document.getElementById("add2").innerHTML = add(5,10,15,20);
}
并告诉 [body] 标签在所有内容加载后运行 function:
<body onload="runWhenBodyHasLoaded()">
然后<p id="add2"></p>
将及时准备好使用document.getElementById
访问它。
或使用 jQuery: https://jsfiddle.net/bdgu8s4h/1/
还可以考虑在最后(正文)加载您的 JS
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="test.css">
</head>
<body>
<p id="add2"></p>
<script type="text/javascript" src="test.js"></script>
</body>
</html>
JS(jQuery):
$(document).ready(function() {
function add(a,b,c,d) {
return a + b + c + d;
}
$('#add2').html(add(5,10,15,20));
});
希望这也有帮助,干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.