【问题标题】:How do I onclick/addeventlistener to an EJS template?如何在 EJS 模板中单击/添加事件侦听器?
【发布时间】:2021-09-09 18:55:05
【问题描述】:

我正在尝试使用 mongodb 构建一个数据库,它将使用 ejs 呈现到一个 html 页面。后端是 node/express。

如何将按钮链接到addeventlistener。 EJS 文档是有限的,我读过其他帖子说 ejs 只呈现 html 而没有其他功能。

最终,我想使用 async/await 将 js 与后端链接。

这是我的 ejs:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>The Beautiful Game</h1>
    <form action="/players" method="POST">
      <input type="text" placeholder="name" name="name" />
      <input type="text" placeholder="club" name="club" />
      <button type="submit" class='submitButton'>Submit</button>
    </form>

    <h2>Players</h2>

    <ul class="players">
      <% for (var i = 0; i < players.length; i++) {%>
      <li class="players">
        <span><%= players[i].name %></span>:
        <span><%= players[i].club %></span>
        <button class="dataDeleteNameButton" data-id="<%=players[i]._id%>">Delete</button> <!-- linking this button -->
      </li>
      <% } %>
    </ul>
    
    <script type="text/javascript" src="js/main.js"></script>
  </body>
</html>

这是我的 js:

document
  .querySelector("dataDeleteNameButton")
  .addEventListener("click", deleteEntry);

async function deleteEntry() {
  console.log("Button is working!");
}

如果需要,这里是服务器:

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const cors = require("cors");
const MongoClient = require("mongodb").MongoClient;

const PORT = process.env.PORT || 8000;

app.use(cors());

const username = "hidden";
const password = "hidden";
const connectionString = `mongodb+srv://${username}:${password}@cluster0.7k2ww.mongodb.net/myFirstDatabase?retryWrites=true&w=majority`;

MongoClient.connect(connectionString, { useUnifiedTopology: true })
  .then((client) => {
    console.log("Connected to database");
    const db = client.db("soccer-players");
    const playerCollection = db.collection("players");

    app.set("view engine", "ejs");
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(express.static("public"));

    app.get("/", (req, res) => {
      db.collection("players")
        .find()
        .toArray()
        .then((result) => {
          res.render("index.ejs", { players: result });
        })
        .catch((error) => console.error(error));
    });

    app.get("/api/players", (req, res) => {
      db.collection("players")
        .find()
        .toArray((err, arr) => {
          res.json(arr);
        });
    });

    app.post("/players", (req, res) => {
      playerCollection
        .insertOne(req.body)
        .then((result) => {
          res.redirect("/");
        })
        .catch((error) => console.error(error));
      console.log(req.body);
    });

    app.delete("/", (req, res) => {
      // playerCollection.deleteOne() <-- 
      // let findID = 
    });

    app.listen(PORT, () => {
      console.log(`Server running on port ${PORT}`);
    });
  })
  .catch((error) => console.error(error));

它的样子:

这是我的脚本标签路径: ../client-side-folder/js-folder/main.js

目录:

main-folder
+--client-side-folder
+----js-folder
+------main.js
+--views-folder
+----index.ejs

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    你可以onclick="myFunction(theIdOfTheButtonHere)"

    这是一个例子:

    https://www.w3schools.com/jsref/event_onclick.asp

    【讨论】:

    • 我使用了addeventlistener。我在原始文件中编辑了我的路径。你能看看这是否正确?
    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多