【发布时间】:2013-02-09 03:20:10
【问题描述】:
我正在尝试验证具有隐藏和非隐藏输入的表单。我在表单验证设置中添加了行 ignore: "" 来验证隐藏的输入,但是这样做,它不会验证它之前的所需文本输入,但只有在它之后才验证。 发生的另一件事是,firstname 的验证在第一次提交后对 blur 起作用(但它仍然不会阻止提交本身)....
这是我的代码,以及 js fiddle DEMO 的链接:
JS:
var countries = [{label:"Vanuatu", code:"VU"},
{label:"Ecuador", code:"EC"}];
$().ready(function() {
$('#country').autocomplete({
source : function(request, response) {
var matcher = new RegExp('^'+$.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(countries, function(element, index) {
return matcher.test(element.label);
}));
},
delay : 0,
change : function(event, ui) {
$('#countryCode').val(ui.item ? ui.item.code : '');
}
});
$("#signupForm").validate({
ignore: "",
rules: {
firstname: {
required: true
},
lastname: {
required: true
},
country: {
required: true
},
countryCode: {
required: function(element){
return $("#signupForm").validate().element( "#country" );
}
},
email: {
required: true,
email: true
}
},
messages: {
firstname: "Please enter your first name",
lastname: "Please enter your last name",
country: "Please select a country",
countryCode: "Please select a valid country",
email: "Please enter a valid email address"
},
submitHandler: function(form) {
alert("fine!");
}
});
});
HTML 表单:
<form id="signupForm" method="post" name="" action="">
<p>
<label for="firstname"></label>
<input class="inputText" type="text" id="firstname" name="firstname" placeholder="First Name">
</p>
<p>
<label for="country"></label>
<input class="inputText" type="text" id="country" name="country" placeholder="Country"/>
<input type="hidden" name="countryCode" id="countryCode" />
</p>
<p>
<label for="lastname"></label>
<input class="inputText" type="text" id="lastname" name="lastname" placeholder="Last Name">
</p>
<p>
<label for="email"></label>
<input class="inputText" type="text" id="email" name="email" placeholder="Email">
</p>
<p>
<input class="submit" type="submit" id="signupButton" value="SUBMIT" />
</p>
</form>
【问题讨论】:
-
countryCode验证的逻辑是什么?只有在指定country时才需要? -
是的,因为我需要验证是否从自动完成中选择了一个有效的国家。这样我就有了填写国家的验证,并选择了国家代码(国家代码是服务器端需要的)。
-
你能检查一下jsfiddle.net/arunpjohny/68uu5/3,看看是否满足你的要求
-
另请参阅此答案以了解使用
ignore选项的正确方法。应该是ignore: []见stackoverflow.com/a/8565769/594235
标签: jquery validation jquery-plugins jquery-validate hidden-field