【发布时间】:2018-11-10 17:45:17
【问题描述】:
我正在尝试从服务器不使用模板引擎提供 html 文件。请找到以下用于启动服务器的脚本。
// script.js
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(express.static(__dirname));
app.get("/", (req, res) => {
res.set("Content-Type", "text/html");
const f = require("./templates")();
console.log(f);
res.send(f);
});
app.listen(3103, () => console.log("hi"));
// template.js
const fs = require("fs");
const html = fs.readFileSync(__dirname + "/temp.html", "utf8");
module.exports = (variables) => {
return html;
};
以下是我的html文件:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=<device-width>, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./script.js"></script> <!-- The click function was served in a different file -->
</head>
<body>
<p>Home Page</p>
<input type="button" value="Click Me" id="btn" onclick="click()">
<script>
console.log("hi");
function click(){ console.log("_Button clicked"); }
//document.getElementById("btn").addEventListener("click", () => {
//console.log("Button Clicked");
//});
</script>
</body>
</html>
我尝试了以下方法但没有成功:
我在按钮元素中包含了
click()内联,并且该函数在同一个html 文件的脚本标记中声明。这不起作用。我将 fromScript 函数包含在
script.js文件中,并将该文件作为静态内容提供。这没有按预期工作。
然后我使用 addEventListener 将点击事件绑定到输入元素。现在,每当我单击按钮时,都会打印两次“Button Clicked”消息。
将 dom 事件绑定到元素的正确/最佳做法是什么?
编辑
感谢您的回答Thijs Kramer。但问题出在函数名上。
如果我将该功能命名为 click,则它不起作用。但是如果我将它重命名为 fromScript 它就可以工作了。
我们不应该用“click”作为函数名吗?
【问题讨论】:
-
您的
fromScript()函数是在另一个函数中定义的,因此它在全局范围内不可用。 -
我做了,因为您不真实地声称没有要求最佳实践作为对@Thijs Kramer 回答的评论。
-
@connexo:好的。我认为他试图帮助我解决这个问题(点击事件不起作用)。感谢您指出了这一点。以后有任何问题我都会更简洁。
标签: javascript html node.js express