javascript - 如何使用 jquery 显示 bootstrap 4 验证反馈?
问题描述
我想要实现的是:使用 ajax 调用从服务器获取表单验证信息,并显示内部的错误/无效反馈,.invalid-feedback
并将:invalid
css 应用于输入字段。
<form id="register-form" novalidate>
<div class="form-group">
<label class="sr-only" for="first_name">first name</label>
<input type="text" id="first_name" name="first_name" value="" class="form-control" >
<div class="invalid-feedback"></div>
</div>
....other inputs
</form>
我能够invalid-feedback
使用以下方法在相关内容中设置错误消息:
$.ajax({
url: actionUrl,
method: "POST",
dataType: "json",
timeout: 5000,
data: form.serialize(),
success: function (response) {
if(response.errors === ''){
pageRedirect("register/login");
} else {
$.each(response.errors, function(field, error) {
form.find('[name="' + field + '"]').siblings('.invalid-feedback').text(error);
});
//feedback is set now how to show them??
}
},
解决方案
如 Bootstrap的Forms 文档中所述:
服务器端
我们建议使用客户端验证,但如果您需要服务器端,您可以使用 .is-invalid 和 .is-valid 指示无效和有效的表单字段。请注意,这些类也支持 .invalid-feedback。
简而言之,您需要将 CSS 类添加is-invalid
到出现验证错误的表单控件中。当你这样做时:
- 表单控件将被红色轮廓包围,表示它存在验证错误
- 具有 CSS 类的兄弟 div
invalid-feedback
将呈现为红色文本
这是一个代码片段,通过“模拟”响应说明了这一点。尝试单击验证按钮:
var form = $("form").first();
$("#validate").click(function() {
var mockResponse = {
errors :
{
'first_name': 'First name must not be blank',
'last_name': 'Last name must not be blank'
}
};
$.each(mockResponse.errors, function(fieldName, error) {
let field = form.find('[name="' + fieldName + '"]');
field.addClass("is-invalid");
let immediateSibling = field.next();
if (immediateSibling.hasClass('invalid-feedback')) {
immediateSibling.text(error);
} else {
field.after("<div class='invalid-feedback'>" + error + "</div>")
}
});
return false;
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body class="bg-light">
<div class="container">
<form id="register-form" novalidate>
<div class="form-group">
<label class="sr-only" for="first_name">First Name</label>
<input type="text" id="first_name" name="first_name" value="" placeholder="First Name" class="form-control" >
</div>
<div class="form-group">
<label class="sr-only" for="last_name">Last Name</label>
<input type="text" id="last_name" name="last_name" value="" placeholder="Last Name" class="form-control" >
</div>
<div class="form-group">
<label class="sr-only" for="email">Email Name</label>
<input type="text" id="email" name="email" value="" placeholder="Email" class="form-control" >
</div>
<button id="validate" class="btn btn-primary btn-lg btn-block" type="submit">Validate</button>
</form>
</div>
推荐阅读
- windows - 如何使用 Windows 批处理查找名为“x”的所有子目录(任意数量的级别)
- javascript - 检查节点js中是否存在模块方法
- git - 两个克隆的 git 存储库与一个 Jenkins 作业一起使用
- php - (PHP) 在 for 循环中处理变量
- python - 如何使用 PyQt 组织布局
- git - Git - 带有变量的自定义命令
- dart - Flutter - 如何获得带有软边缘孔的半透明模糊层
- vba - 无法点击某些点来抓取信息
- java - 自动将 JAVA_HOME 设置为最新的 JDK 版本
- javascript - 在按钮单击时使用参数调用 mvc 操作