我有一个Bootstrap表单,我基本上试图遍历所有输入字段,检查它们是否有required
类,它们的值是null
,如果是这样,添加一些CSS作为错误指示符。由于某种原因,if
语句不起作用。
我的代码是:
$("#orderForm").on("submit", function(e) {
var formInputFields = $(".form-control")
formInputFields.each(function(i) {
if (formInputFields[i].hasClass("required") && formInputFields[i].val() === "null") {
e.preventDefault();
formInputFields.css("border", "2px solid #741e4f");
}
});
});
HTML沿着这些行,但更长,相同的结构,form-group
div重复:
<form class="form-horizontal" id="orderForm">
<div class="form-group">
<label for="" class="col-sm-4 control-label">Lorem</label>
<div class="col-sm-6">
<select name="" id="" class="form-control required">
<option value=""></option>
<option value="lorem">lorem</option>
<option value="ipsun">ipsun</option>
</select>
</div>
</div>
答案 0 :(得分:1)
当您说formInputFields[i].hasClass
时,您的代码引发了错误,因为formInputFields
是 jquery object
,而不是formInputFields[i]
。由于您使用的是$.each
,因此第二个参数会为您提供当前元素而不是formInputFields[i]
,您可以使用该第二个参数。另外,当你说cur.val()==="null"
时,它会在左右之间进行强有力的比较,即两者应该匹配value
和type
,而这里总是失败。因此,只需检查length
的{{1}}以及 val
0
。以下是我所做的更改。检查并告诉我您是否遇到任何问题。
invalid element
$("#orderForm").on("submit", function(e) {
var formInputFields = $(".form-control")
formInputFields.each(function(i, v) {
var cur = $(v);
if (cur.hasClass("required") && !(cur.val().length)) {
e.preventDefault();
cur.css("border", "2px solid #741e4f");
}
else
cur.css("border", "");
});
});
答案 1 :(得分:0)
首先,当需要输入时,添加required as an attribute而不是类。
<input type="text" id="foo" placeholder="bar" value="" required>
然后,您将能够使用以下方法获取当前缺少值的任何所需输入:
var list_of_invalid_inputs = document.querySelectorAll('*:invalid');
或者如果你必须使用jquery like so。
同样的选择器也适用于css:
input:invalid { border: 2px solid #741e4f; }
答案 2 :(得分:0)
您可以使用 $(this)而不是 formInputFields [i] .hasClass ... ,因为您需要对象来验证它是否具有“必需”类是否有价值,例如:
$(document).ready(function(){
$("#orderForm").on("submit", function(e){
var formInputFields = $(".form-control");
formInputFields.each(function(i) {
if($(this).hasClass("required") && $.trim($(this).val()) === ""){
e.preventDefault();
$(this).css("border", "2px solid #741e4f");
}
});
return false;
});
});