【发布时间】:2022-01-20 12:38:50
【问题描述】:
我有一个页面,用户可以在帖子下发表评论。 post 和 cmets 使用 ajax 加载。我正在尝试使用以下代码验证评论表单。
document.querySelector('body').addEventListener('submit', event => {
if (event.target.matches('.needs-validation')) {
if (event.target.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
event.target.classList.add('was-validated');
}
}, false);
评论表单使用ajax提交。
$('body').on('submit', '.cmnt-frm', function(e) {
现在正在验证表单并显示错误消息,但正在使用 ajax 提交表单。 event.preventDefault() 不工作。
下面的代码有效,但仅适用于初始页面加载。在提交新帖子时,帖子列表会使用 ajax 进行更新,在这种情况下这不起作用
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
代码有什么问题。请帮忙。
【问题讨论】:
-
PreventDefault 不会阻止其他事件监听器运行。
-
你不会在一个地方处理提交似乎很奇怪。
-
@epascarello 问题已更新
标签: javascript forms dom-events