实现至少填写一个电话号码的前端验证(JS/jQuery)
实现ASP.NET Core表单至少填写一个电话号码的前端验证
核心思路
监听表单提交事件,检查三个电话号码输入框的内容是否全部为空。如果是,阻止表单提交并显示指定的错误提示(红色文本或自定义tooltip)。同时必须配合后端验证,避免前端验证被绕过。
方案1:纯JavaScript实现
步骤1:添加错误提示元素
在表单内添加默认隐藏的红色提示文本:
<form id="phoneForm" method="post"> <!-- 电话号码输入框 --> <input type="text" id="HomePhone" name="HomePhone" placeholder="家庭电话"> <input type="text" id="WorkPhone" name="WorkPhone" placeholder="工作电话"> <input type="text" id="CellPhone" name="CellPhone" placeholder="手机"> <!-- 红色文本提示 --> <div id="phoneError" style="color: #dc3545; margin-top: 8px; display: none;">至少需要填写一个电话号码</div> <button type="submit" id="submitBtn">提交</button> </form>
步骤2:编写验证逻辑
// 监听表单提交事件 document.getElementById('phoneForm').addEventListener('submit', function(e) { // 获取输入框内容并去除首尾空格 const homePhone = document.getElementById('HomePhone').value.trim(); const workPhone = document.getElementById('WorkPhone').value.trim(); const cellPhone = document.getElementById('CellPhone').value.trim(); const errorElement = document.getElementById('phoneError'); const submitBtn = document.getElementById('submitBtn'); // 检查是否全部为空 if (!homePhone && !workPhone && !cellPhone) { e.preventDefault(); // 阻止表单提交 errorElement.style.display = 'block'; // 显示红色提示 // 可选:给提交按钮添加原生tooltip提示 submitBtn.setAttribute('title', '至少需要填写一个电话号码'); } else { // 验证通过,隐藏所有提示 errorElement.style.display = 'none'; submitBtn.removeAttribute('title'); } });
方案2:jQuery实现
如果项目已引入jQuery,可使用更简洁的代码:
$('#phoneForm').on('submit', function(e) { const homePhone = $('#HomePhone').val().trim(); const workPhone = $('#WorkPhone').val().trim(); const cellPhone = $('#CellPhone').val().trim(); const $errorElement = $('#phoneError'); const $submitBtn = $('#submitBtn'); if (!homePhone && !workPhone && !cellPhone) { e.preventDefault(); $errorElement.show(); $submitBtn.attr('title', '至少需要填写一个电话号码'); } else { $errorElement.hide(); $submitBtn.removeAttr('title'); } });
可选:自定义浮动Tooltip
如果需要更美观的提示效果,可实现自定义浮动tooltip:
1. 添加Tooltip元素
<div id="phoneTooltip" style="position: absolute; background: #dc3545; color: #fff; padding: 4px 8px; border-radius: 4px; display: none; z-index: 1000; font-size: 14px;">至少需要填写一个电话号码</div>
2. 调整验证逻辑(纯JS示例)
document.getElementById('phoneForm').addEventListener('submit', function(e) { const homePhone = document.getElementById('HomePhone').value.trim(); const workPhone = document.getElementById('WorkPhone').value.trim(); const cellPhone = document.getElementById('CellPhone').value.trim(); const errorElement = document.getElementById('phoneError'); const tooltipElement = document.getElementById('phoneTooltip'); const submitBtn = document.getElementById('submitBtn'); if (!homePhone && !workPhone && !cellPhone) { e.preventDefault(); errorElement.style.display = 'block'; // 定位tooltip到提交按钮上方 const btnRect = submitBtn.getBoundingClientRect(); tooltipElement.style.left = `${btnRect.left + window.scrollX}px`; tooltipElement.style.top = `${btnRect.top + window.scrollY - 30}px`; tooltipElement.style.display = 'block'; // 点击页面其他区域隐藏tooltip const hideTooltip = () => { tooltipElement.style.display = 'none'; document.removeEventListener('click', hideTooltip); }; document.addEventListener('click', hideTooltip); } else { errorElement.style.display = 'none'; tooltipElement.style.display = 'none'; } });
重要补充:后端验证
前端验证仅提升用户体验,必须配合后端验证防止恶意提交:
1. 修改Model类(移除必填属性)
public class PhoneViewModel { public string HomePhone { get; set; } public string WorkPhone { get; set; } public string CellPhone { get; set; } }
2. 在Controller中添加验证逻辑
[HttpPost] public IActionResult SubmitForm(PhoneViewModel model) { // 检查三个号码是否全部为空 if (string.IsNullOrWhiteSpace(model.HomePhone) && string.IsNullOrWhiteSpace(model.WorkPhone) && string.IsNullOrWhiteSpace(model.CellPhone)) { ModelState.AddModelError(string.Empty, "至少需要填写一个电话号码"); return View(model); } // 后续业务逻辑 return RedirectToAction("Success"); }
内容的提问来源于stack exchange,提问作者rimi
相关产品推荐
相关产品推荐

