javascript - JavaScript 表单验证移除值
问题描述
我正在使用 JavaScript 库进行客户端表单验证(https://github.com/cferdinandi/bouncer)。它工作得很好,但有一种我不明白的奇怪行为。
我有两个用于表单提交的按钮,每个按钮都有不同的值。在不使用库验证此表单的情况下,我将在服务器端检索确切的值。但是当我使用该库进行验证时,该值将消失。所有其他表单值都可用。我检查了整个库代码,发现“event.preventDefault()”似乎是问题所在。
当我删除此行时,一切都很好,但当然,表单验证将不起作用。
有人有什么想法吗?
var submitHandler = function (event) {
// Only run on matching elements
if (!event.target.matches(selector)) return;
// Prevent form submission
event.preventDefault();
// Validate each field
var errors = publicAPIs.validateAll(event.target);
// If there are errors, focus on the first one
if (errors.length > 0) {
errors[0].focus();
emitEvent(event.target, 'bouncerFormInvalid', {errors: errors});
return;
}
// Otherwise, submit if not disabled
if (!settings.disableSubmit) {
event.target.submit();
}
// Emit custom event
if (settings.emitEvents) {
emitEvent(event.target, 'bouncerFormValid');
}
};
<button class="" name="page[__page]" type="submit" value="0">back</button>
<button class="" name="page[__page]" type="submit" value="2">next</button>
解决方案
根据标准,问题似乎是提交者在.submit()
被调用时没有被转发:
如果以下任何一项为真:
- field 元素是一个按钮,但它不是 submitter。
然后继续。
这种情况似乎是可以解决的,将该信息移动到隐藏字段中,并使用提交者(即next
或prev
)来填充其值。
例子
document.body.innerHTML = `
<form>
<input type="hidden" name="page[__page]">
<button class="" type="submit" value="0">back</button>
<button class="" type="submit" value="2">next</button>
</form>
`;
document.body.firstElementChild.addEventListener('submit', e => {
e.preventDefault();
var page = e.target.querySelector('input[name="page[__page]"]');
page.value = e.submitter.value;
e.target.submit();
});
此时,页面将按预期传递,您的问题应该得到解决。
PS您还可以探索form.repostValidity()并e.preventDefault()
仅在报告返回时使用false
。
推荐阅读
- php - Laravel 5.7:Phpunit 错误 - 调用字符串上的成员函数 getBag()
- android - 引起:android.database.sqlite.SQLiteException:没有这样的表:BOOK(代码1 SQLITE_ERROR)
- google-calendar-api - 删除活动日历的会议数据
- css - 固定移动标题时按钮不起作用
- c++ - 输出错误的种子号
- c# - 创建一个设置页面,如 uwp 电子邮件应用程序之一
- azure - Azure SSAS 表格完整流程:内存不会释放
- c# - 当某些条件不满足时,如何阻止在 Checked 事件上签入的复选框?
- .net - 从 DevEx 11.2 升级到 DevEx 18.1 后无法呈现 ASPxGridView
- c++ - 如何返回转发参考?