如何使用 bootstrap 模态来更新数据?
How to use bootstrap modal for update the data?
我正在使用 ejs 模板和 nodejs 作为后端开发电子商务应用程序。因为我有行政工作的管理员角色。我创建了 Bootstrap 模式来更新订单状态。但我只能更新第一个订单,如果我尝试任何其他订单,只有第一个订单得到更新。谁能帮我解决这个问题。
allOrders.ejs(订单列表和模式)
<%- include("../partials/header") %> <%- include("../partials/navbar") %>
<div class="container-fluid">
<h3 class="text-center mt-2">All Orders</h3>
<table class="table table-bordered border-primary mt-4 mb-3">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">Order Date</th>
<th scope="col">Order Updated Date</th>
<th scope="col">Status</th>
<th scope="col">Amount</th>
<th scope="col">Actions</th>
</tr>
</thead>
<% for(let order of allOrders ){ %>
<tbody>
<tr>
<td><%= order._id %></td>
<td><%= order.date %></td>
<td><%= order.updatedAt %></td>
<td><%= order.status %></td>
<td><%= order.amount %></td>
<td className="bg-secondary">
<!-- Button trigger modal -->
<button
type="button"
class="btn btn-primary"
data-bs-toggle="modal"
data-bs-target="#exampleModal"
>
Update
</button>
<!-- Modal For Edit Status-->
<div
class="modal fade"
id="exampleModal"
tabindex="-1"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">
Update Order Status
</h5>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<form
class="m-5"
action="/admin/<%= currentUser._id %>/order/<%=order._id%>?_method=PATCH"
method="POST"
novalidate
>
<div class="mb-3">
<label for="orderId" class="form-label">Order ID</label>
<input
type="text"
class="form-control"
disabled
value="<%= order._id %>"
/>
<label class="form-label">Current Status</label>
<input
type="text"
class="form-control"
disabled
value="<%= order.status %>"
/>
<div class="mb-4">
<label for="updateStatus" class="form-label"
>Update Staus
</label>
<select
class="form-select form-control"
name="status"
value="status"
>
<option name="Processing" value="Processing">
Processing
</option>
<option name="Prepared" value="Prepared">
Prepared
</option>
<option name="Dispatched" value="Dispatched">
Dispatched
</option>
<option name="Delivered" value="Delivered">
Delivered
</option>
</select>
</div>
</div>
<button type="submit" class="btn btn-primary save">
Save Status
</button>
</form>
<div class="modal-footer">
<button
type="button"
class="btn btn-secondary"
data-bs-dismiss="modal"
>
Cancle
</button>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
<% } %>
</table>
</div>
<%- include("../partials/footer") %>
订单路线
const express = require("express");
const router = express.Router();
const { isLoggedIn } = require("../middlewere");
const Order = require("../models/order");
router.get("/admin/:id/allorders", isLoggedIn, async (req, res) => {
try {
const allOrders = await Order.find({}).sort({ date: -1 });
res.render("admin/allOrders", { allOrders });
} catch (error) {
req.flash("error", "Cannot Find Orders");
res.render("error");
}
});
router.patch("/admin/:id/order/:orderId", isLoggedIn, async (req, res) => {
try {
await Order.findByIdAndUpdate(req.params.orderId, req.body);
req.flash("success", "Order Updated Successfully");
res.redirect(`/admin/${req.params.id}/allorders`);
} catch (error) {
req.flash("error", "Cannot Update Order");
res.render("error");
}
});
module.exports = router;
我能够获取所有订单,但在模式中它总是显示第一个订单的详细信息。我检查了来自 Devtool (https://codeshare.io/8pyknv) 的代码,它也显示了正确的信息。但是模态没有显示它。
问题存在于 for 循环内部。在您的循环中,您有一个带有属性 data-bs-target="#exampleModal"
的按钮。这意味着您 table 中的所有行都将具有相同的按钮,该按钮会触发 ID 为 exampleModal
的模式。所有这些按钮将调用相同的模式。
除此之外,每个订单都会生成一个具有特定 id exampleModal 的模态。所以所有模态都有相同的 id。这就是为什么你总是打开第一个模式。每个模态必须有一个唯一的 id
要解决此问题,您应该为模态框提供唯一的 ID,例如
<div
class="modal fade"
id="Modal<%= order._id %>"
tabindex="-1"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
并且每个按钮都应该调用自己的模式,
<button
type="button"
class="btn btn-primary"
data-bs-toggle="modal"
data-bs-target="#Modal<%= order._id %>"
>
我正在使用 ejs 模板和 nodejs 作为后端开发电子商务应用程序。因为我有行政工作的管理员角色。我创建了 Bootstrap 模式来更新订单状态。但我只能更新第一个订单,如果我尝试任何其他订单,只有第一个订单得到更新。谁能帮我解决这个问题。
allOrders.ejs(订单列表和模式)
<%- include("../partials/header") %> <%- include("../partials/navbar") %>
<div class="container-fluid">
<h3 class="text-center mt-2">All Orders</h3>
<table class="table table-bordered border-primary mt-4 mb-3">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">Order Date</th>
<th scope="col">Order Updated Date</th>
<th scope="col">Status</th>
<th scope="col">Amount</th>
<th scope="col">Actions</th>
</tr>
</thead>
<% for(let order of allOrders ){ %>
<tbody>
<tr>
<td><%= order._id %></td>
<td><%= order.date %></td>
<td><%= order.updatedAt %></td>
<td><%= order.status %></td>
<td><%= order.amount %></td>
<td className="bg-secondary">
<!-- Button trigger modal -->
<button
type="button"
class="btn btn-primary"
data-bs-toggle="modal"
data-bs-target="#exampleModal"
>
Update
</button>
<!-- Modal For Edit Status-->
<div
class="modal fade"
id="exampleModal"
tabindex="-1"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">
Update Order Status
</h5>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<form
class="m-5"
action="/admin/<%= currentUser._id %>/order/<%=order._id%>?_method=PATCH"
method="POST"
novalidate
>
<div class="mb-3">
<label for="orderId" class="form-label">Order ID</label>
<input
type="text"
class="form-control"
disabled
value="<%= order._id %>"
/>
<label class="form-label">Current Status</label>
<input
type="text"
class="form-control"
disabled
value="<%= order.status %>"
/>
<div class="mb-4">
<label for="updateStatus" class="form-label"
>Update Staus
</label>
<select
class="form-select form-control"
name="status"
value="status"
>
<option name="Processing" value="Processing">
Processing
</option>
<option name="Prepared" value="Prepared">
Prepared
</option>
<option name="Dispatched" value="Dispatched">
Dispatched
</option>
<option name="Delivered" value="Delivered">
Delivered
</option>
</select>
</div>
</div>
<button type="submit" class="btn btn-primary save">
Save Status
</button>
</form>
<div class="modal-footer">
<button
type="button"
class="btn btn-secondary"
data-bs-dismiss="modal"
>
Cancle
</button>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
<% } %>
</table>
</div>
<%- include("../partials/footer") %>
订单路线
const express = require("express");
const router = express.Router();
const { isLoggedIn } = require("../middlewere");
const Order = require("../models/order");
router.get("/admin/:id/allorders", isLoggedIn, async (req, res) => {
try {
const allOrders = await Order.find({}).sort({ date: -1 });
res.render("admin/allOrders", { allOrders });
} catch (error) {
req.flash("error", "Cannot Find Orders");
res.render("error");
}
});
router.patch("/admin/:id/order/:orderId", isLoggedIn, async (req, res) => {
try {
await Order.findByIdAndUpdate(req.params.orderId, req.body);
req.flash("success", "Order Updated Successfully");
res.redirect(`/admin/${req.params.id}/allorders`);
} catch (error) {
req.flash("error", "Cannot Update Order");
res.render("error");
}
});
module.exports = router;
我能够获取所有订单,但在模式中它总是显示第一个订单的详细信息。我检查了来自 Devtool (https://codeshare.io/8pyknv) 的代码,它也显示了正确的信息。但是模态没有显示它。
问题存在于 for 循环内部。在您的循环中,您有一个带有属性 data-bs-target="#exampleModal"
的按钮。这意味着您 table 中的所有行都将具有相同的按钮,该按钮会触发 ID 为 exampleModal
的模式。所有这些按钮将调用相同的模式。
除此之外,每个订单都会生成一个具有特定 id exampleModal 的模态。所以所有模态都有相同的 id。这就是为什么你总是打开第一个模式。每个模态必须有一个唯一的 id
要解决此问题,您应该为模态框提供唯一的 ID,例如
<div
class="modal fade"
id="Modal<%= order._id %>"
tabindex="-1"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
并且每个按钮都应该调用自己的模式,
<button
type="button"
class="btn btn-primary"
data-bs-toggle="modal"
data-bs-target="#Modal<%= order._id %>"
>