制作页面的删除功能时,想要实现点击【删除】弹出确认对话框。目前状态是点击后没有弹出
```Html
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>种类</th>
<th>文件名</th>
<th>图片</th>
</tr>
</thead>
<tbody>
<tr th:each="photo : ${photo}">
<td th:text="${photo.name}">商品</td>
<td th:text="${photo.filename}">earth.jpg</td>
<td><img
th:src="@{/uploads/stock/{filename}(filename=${photo.filename})}"
alt="" width="100px"></td>
<td>
<form method="POST" th:action="'./photo_delete&'+${photo.id}" id="delete_1">
<input type="hidden" name="_token"
value="XV7tF73lP1V31unyV3Oxkj2siVujlZtLdM6snqO4"><a th:href="'./photo_delete&'+${photo.id}" class="btn btn-danger js-deleteBtn">删除</a>
</form>
</td>
</tr>
</tbody>
</table>
// 获取删除按钮元素
var deleteBtn = document.querySelector('.js-deleteBtn');
// 绑定点击事件
deleteBtn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取表单元素
var form = document.getElementById('delete_1');
// 提交表单
form.submit();
}
});
```
在body里面scrip包裹js的内容就行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>种类</th>
<th>文件名</th>
<th>图片</th>
</tr>
</thead>
<tbody>
<tr th:each="photo : ${photo}">
<td th:text="${photo.name}">商品</td>
<td th:text="${photo.filename}">earth.jpg</td>
<td><img
th:src="@{/uploads/stock/{filename}(filename=${photo.filename})}"
alt="" width="100px"></td>
<td>
<form method="POST" th:action="'./photo_delete&'+${photo.id}" id="delete_1">
<input type="hidden" name="_token"
value="XV7tF73lP1V31unyV3Oxkj2siVujlZtLdM6snqO4"><a th:href="'./photo_delete&'+${photo.id}" class="btn btn-danger js-deleteBtn">删除</a>
</form>
</td>
</tr>
</tbody>
</table>, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 获取删除按钮元素
var deleteBtn = document.querySelector('.js-deleteBtn');
// 绑定点击事件
deleteBtn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取表单元素
var form = document.getElementById('delete_1');
// 提交表单
form.submit();
}
});
</script>
</body>
</html>
js要放到html的下方才能获取到元素
需要把js放在html的body下面;
因为JavaScript是无法操作位于它下方的DOM的,因为此时DOM还没有构建出来。因此最好将script放在body之后,也就是等到所有的HTML都解析完成之后,再进行JavaScript的相关操作。
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>种类</th>
<th>文件名</th>
<th>图片</th>
</tr>
</thead>
<tbody>
<tr th:each="photo : ${photo}">
<td th:text="${photo.name}">商品</td>
<td th:text="${photo.filename}">earth.jpg</td>
<td><img
th:src="@{/uploads/stock/{filename}(filename=${photo.filename})}"
alt="" width="100px"></td>
<td>
<form method="POST" th:action="'./photo_delete&'+${photo.id}" id="delete_1">
<input type="hidden" name="_token"
value="XV7tF73lP1V31unyV3Oxkj2siVujlZtLdM6snqO4"><a th:href="'./photo_delete&'+${photo.id}" class="btn btn-danger js-deleteBtn">删除</a>
</form>
</td>
</tr>
</tbody>
</table>
<script>
// 获取删除按钮元素
var deleteBtn = document.querySelector('.js-deleteBtn');
// 绑定点击事件
deleteBtn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取表单元素
var form = document.getElementById('delete_1');
// 提交表单
form.submit();
}
});
</script>
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您的代码中使用了 document.querySelector('.js-deleteBtn') 获取删除按钮元素,这个方法只会获取页面中第一个匹配的元素,如果有多个删除按钮,只会绑定第一个按钮的点击事件。
解决方法是使用 document.querySelectorAll('.js-deleteBtn') 获取所有的删除按钮元素,然后使用 forEach 方法为每一个按钮绑定点击事件。具体代码如下:
// 获取所有的删除按钮元素
var deleteBtns = document.querySelectorAll('.js-deleteBtn');
// 遍历所有的删除按钮元素,为每一个按钮绑定点击事件
deleteBtns.forEach(function(deleteBtn) {
deleteBtn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取当前按钮所在的表单元素
var form = deleteBtn.closest('form');
// 提交表单
form.submit();
}
});
});
这里还修改了获取表单元素的方法,使用了 deleteBtn.closest('form') 获取当前按钮所在的表单元素,这样可以确保提交的是正确的表单。
另外,建议将 JavaScript 代码放在页面底部,或者使用异步加载的方式,以提高页面加载速度和用户体验。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,你的代码中只有一个删除按钮元素,所以即使绑定了点击事件,也只会对第一个删除按钮有效。
正确的做法是给每一个删除按钮元素添加一个唯一的ID,然后在绑定点击事件时获取对应的按钮元素。
你可以在form表单元素中添加一个id属性,然后在删除按钮中通过该id来绑定对应的点击事件。
更新的HTML代码如下:
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>种类</th>
<th>文件名</th>
<th>图片</th>
</tr>
</thead>
<tbody>
<tr th:each="photo : ${photo}">
<td th:text="${photo.name}">商品</td>
<td th:text="${photo.filename}">earth.jpg</td>
<td><img
th:src="@{/uploads/stock/{filename}(filename=${photo.filename})}"
alt="" width="100px"></td>
<td>
<form method="POST" th:action="'./photo_delete&'+${photo.id}" id="delete_${photo.id}">
<input type="hidden" name="_token" value="XV7tF73lP1V31unyV3Oxkj2siVujlZtLdM6snqO4">
<a th:href="'./photo_delete&'+${photo.id}" class="btn btn-danger js-deleteBtn" data-id="${photo.id}">删除</a>
</form>
</td>
</tr>
</tbody>
</table>
接下来,我们需要修改JavaScript代码,获取所有的删除按钮元素,并为每一个按钮元素绑定点击事件。
// 获取所有的删除按钮元素
var deleteBtns = document.querySelectorAll('.js-deleteBtn');
// 遍历所有的删除按钮元素,并为每一个按钮元素绑定点击事件
deleteBtns.forEach(function(deleteBtn) {
// 绑定点击事件
deleteBtn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 获取要删除的ID
var id = deleteBtn.getAttribute('data-id');
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取对应的表单元素
var form = document.getElementById('delete_' + id);
// 提交表单
form.submit();
}
});
});
这样,每个删除按钮都会绑定对应的点击事件,并弹出确认对话框。如果用户确认删除,则提交对应的表单。
如果我的回答解决了您的问题,请采纳!
你的代码只获取了一个删除按钮元素:
var deleteBtn = document.querySelector('.js-deleteBtn');
这样只会获取到第一个符合.js-deleteBtn
选择器的元素。如果有多个删除按钮,其他的就无法弹出确认对话框。
解决方法是遍历所有删除按钮元素,为每个按钮都绑定点击事件。可以使用querySelectorAll
方法获取所有.js-deleteBtn
元素,然后使用forEach
方法遍历。修改代码如下:
// 获取所有删除按钮元素
var deleteBtns = document.querySelectorAll('.js-deleteBtn');
// 遍历所有按钮元素,为每个按钮绑定点击事件
deleteBtns.forEach(function(deleteBtn) {
deleteBtn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取表单元素
var form = document.getElementById('delete_1');
// 提交表单
form.submit();
}
});
});
这样就可以为所有删除按钮元素都绑定点击事件,实现弹出确认对话框的功能了。
在JavaWeb页面制作一个删除功能的确认对话框的具体解决方案如下:
<button onclick="confirmDelete()">删除</button>
<script>
function confirmDelete() {
if (confirm("确定要删除吗?")) {
// 执行删除操作
}
}
</script>
@RequestMapping("/delete")
public String deleteUser(@RequestParam("id") Integer id) {
userService.deleteUserById(id); // 删除方法在userService中实现
return "redirect:/user/list"; // 删除后重定向到用户列表页面
}
其中@RequestParam注解可以从请求参数中获取到id的值。
需要注意的是,在删除操作完成后需要跳转到另外一个页面,否则删除后会停留在删除页面。
javascript 放到html head中间
可以正常调取其弹框呀。 ???????????????
以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
根据代码,问题出在:
var deleteBtn = document.querySelectorAll('.js-deleteBtn');
因为有多行,需要获取所有删除按钮的nodeList,而不是单个元素。
2. 绑定点击事件 deleteBtn.addEventListener('click', function(event) {
应该是:
deleteBtn.forEach(function(btn){
btn.addEventListener('click', function(event) {
需要遍历所有按钮,分别绑定点击事件。
3. 弹出确认对话框 var confirmDelete = confirm("确定要删除吗?");
应该在点击事件的回调函数中弹出:
btn.addEventListener('click', function(event) {
var confirmDelete = confirm("确定要删除吗?");
// ...
}
修正后的代码如下:
js
// 获取删除按钮元素
var deleteBtn = document.querySelectorAll('.js-deleteBtn');
// 遍历所有按钮,绑定点击事件
deleteBtn.forEach(function(btn){
btn.addEventListener('click', function(event) {
// 阻止默认的链接点击行为
event.preventDefault();
// 弹出确认对话框
var confirmDelete = confirm("确定要删除吗?");
// 如果用户确认删除,则提交表单
if (confirmDelete) {
// 获取表单元素
var form = event.target.closest('form');
// 提交表单
form.submit();
}
});
});
该代码可以正常弹出确认对话框,并在点击确认后提交表单删除对应数据。
请检查修正后的代码,如果仍有其他问题请提出,我将继续提供帮助。