javascript - 表单:在表单提交之前使用 jQuery 验证特殊情况
问题描述
我需要在不使用任何特殊插件的情况下验证表单,只需 jQuery。
我有一个禁用的提交按钮,我像这样启用它:
const getFields = $(
'form#inquiry-component-form input, form#inquiry-component-form textarea, form#inquiry-component-form select'
).filter('[required]:visible');
getFields.on('input', () => {
let empty = false;
getFields.each(function() {
if (!empty && $(this).val() == '') {
empty = true;
}
});
$('#submit-inquiry-form').prop('disabled', empty);
});
我遇到的问题是表单包含电话号码和电子邮件地址输入,因此当这两个输入不再为空时,提交按钮将变为启用状态。我需要它们首先匹配模式,然后启用提交按钮。
这些是电话和电子邮件输入:
<input id="inquiry-phone" class="form-control" type="tel" name="phone" placeholder="Phone Number (10 digits)" pattern="[1-9]{1}[0-9]{9}" required>
<input id="inquiry-email" class="form-control" type="email" name="email" placeholder="Email address" required>
有任何想法吗?
解决方案
你可以尝试这样的事情。我添加了一个提交按钮,然后我们正在检查是否启用该按钮或不使用正则表达式。
<form id="submit-inquiry-form">
<input id="inquiry-phone" class="form-control" type="tel" name="phone" placeholder="Phone Number (10 digits)" pattern="[1-9]{1}[0-9]{9}" required>
<input id="inquiry-email" class="form-control" type="email" name="email" placeholder="Email address" required>
<button id="btn" disabled>Submit</button>
</form>
const getFields = $(
'input'
).filter('[required]:visible');
getFields.on('input', () => {
let empty = false;
let patternMatch = true;
getFields.each(function() {
console.log("check", $(this).val())
if ($(this).val().trim() == '') {
empty = true;
}
// check for regex
if ($(this).attr("pattern")) {
const regex = new RegExp($(this).attr("pattern"));
patternMatch = regex.test($(this).val())
}
});
if (empty || !patternMatch) {
console.log("empty or bad match")
$('#btn').attr('disabled', true);
} else {
$('#btn').removeAttr('disabled');
}
});
推荐阅读
- python - 类型提示 Callable 无参数
- continuous-integration - 已禁用 Microsoft CI 仍在尝试部署
- haskell - 在多义词中使用 pooledMapConcurrentlyN
- python - How to manage Python's sys.path for a project in a system independent way
- java - Javac 类路径/cp 选项找不到源文件
- javascript - 如何一次在“显示:flex”上只有 1 个 div
- javascript - 为什么背景图像中的图像是强奸?
- excel - 我需要帮助找到一个公式来格式化我的 Excel 数据库
- javascript - 如何使用 Leaflet.js 动态生成地图?
- objective-c - How to add uncompiled .mlmodel to Xcode UnitTests bundle