bootstrap 表单验证在 结构中失效,是因为 HTML 规范禁止将 直接嵌套在 或 内(除非使用 display: contents 等现代 CSS 方式绕过渲染限制),导致表单元素脱离有效 dom 上下文,checkValidity() 无法正确识别控件。本文提供语义合规、样式可控的替代方案。
bootstrap 表单验证在 `
在 Bootstrap 应用中,开发者常希望复用表格布局展示数据与编辑表单(如 ID 列只读、用户名列可编辑并带验证)。但直接将
CSS Grid 能精准复现表格的对齐效果,同时完全兼容表单语义。以下为可直接运行的完整实现:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <style> .grid-form { display: grid; grid-template-columns: max-content 1fr; gap: 0.5rem 1rem; align-items: center; margin-bottom: 1rem; } .label-cell { font-weight: 500; } .input-cell { display: flex; gap: 0.5rem; align-items: center; } </style> </head> <body> <div class="container mt-4"> <form method="POST" action="#" class="needs-validation grid-form" novalidate> <!-- 行 1:ID --> <div class="label-cell">ID:</div> <div class="input-cell">1</div> <!-- 行 2:Username(含验证) --> <div class="label-cell">Username:</div> <div class="input-cell"> <input type="text" class="form-control" placeholder="New username" name="username" required> <div class="invalid-feedback">Please provide a username.</div> <button class="btn btn-primary" type="submit">Confirm</button> </div> </form> </div> <script src="https://code.jquery.com/jquery-3.7.0.js" integrity="sha256-JlqSTELeR4TLqP0OG9dxM7yDPqX1ox/HfgiSLBj8+kM=" crossorigin="anonymous"></script> <script> $(document).ready(function() { const forms = $('.needs-validation'); Array.from(forms).forEach(form => { form.addEventListener('submit', function(event) { if (!this.checkValidity()) { event.preventdefault(); event.stopPropagation(); } this.classList.add('was-validated'); }); }); }); </script> </body> </html>
input.addEventListener('input', () => { if (input.checkValidity()) { input.classList.remove('is-invalid'); input.nextElementSibling.classList.remove('d-block'); } else { input.classList.add('is-invalid'); input.nextElementSibling.classList.add('d-block'); } });
放弃
Sublime如何配置VHDL硬件描述语言支持?(FPGA/ASIC开发)
PHP 变量销毁机制面试题