Javascript 使用动态规则验证多个表字段
我有一个动态表,每行包含country和numberOfState字段。目前,我可以在单击“AddNewRecord”按钮后添加新记录并分别验证country和numberOfState字段(如必填),该按钮位于生成动态表唯一字段名的代码下方,即第一行的name=“country\u 0”、“numberOfState\u 0”,第二行的name=“country\u 1”、“numberOfState\u 1”等 要检查是否可以根据下面的addRowRule函数使用动态规则代码同时验证动态国家/地区和numberOfState字段(即国家/地区为美国,numberOfState必须为50)。提前谢谢Javascript 使用动态规则验证多个表字段,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我有一个动态表,每行包含country和numberOfState字段。目前,我可以在单击“AddNewRecord”按钮后添加新记录并分别验证country和numberOfState字段(如必填),该按钮位于生成动态表唯一字段名的代码下方,即第一行的name=“country\u 0”、“numberOfState\u 0”,第二行的name=“country\u 1”、“numberOfState\u 1”等 要检查是否可以根据下面的addRowRule函数使用动态规则代码同时验证动态国家
$(document).ready(function(e){
var rowindex = 0;
$("#AddNewRecord").click(function(){
var row =
"<tr><td>input name=country_"+rowindex+" type=text class='countryRule'/></td>
<tr><td>input name=numberOfState_"+rowindex+" type=text class='stateRule'/></td></tr>";
$("#table").append(row);
rowindex++;
addRowRule(rowindex);
});
jQuery.validate.addClassRules({
countryRule:{required:true},
stateRule:{required:true}
});
$('form').validate();
function addRowRule(i) {
var country = '#country_' + i,
var numberOfState = '#numberOfState_' + i;
$(country).rules('add', {
required: true,
numberOfState:{
required: {
depend: function(element){
if ($(country).val() == 'US' &&
$(numberOfState).val() !=50){
return false;
}
return true;
}
messages: {
numberOfState: "Number of state not match with country",
}
},
messages: {
required: "Required input",
}
});
});
$(文档).ready(函数(e){
var-rowindex=0;
$(“#添加新记录”)。单击(函数(){
变量行=
“输入名称=国家\”+行索引+“类型=文本class='countryRule'/>
输入名称=numberOfState_u“+行索引+”类型=文本class='stateRule'/>;
$(“#表”)。追加(行);
rowindex++;
addRowRule(rowindex);
});
jQuery.validate.addClassRules({
countryRule:{required:true},
stateRule:{required:true}
});
$('form').validate();
函数addRowRule(i){
var country='#country'+i,
变量numberOfState='#numberOfState'+i;
$(国家)。规则('添加'{
要求:正确,
numberOfState:{
所需:{
依赖:函数(元素){
如果($(country).val()=='US'&&
$(numberOfState).val()!=50){
返回false;
}
返回true;
}
信息:{
numberOfState:“州数与国家不匹配”,
}
},
信息:{
必需:“必需输入”,
}
});
});
更新代码以与所有人共享:
$(文档).ready(函数(){
$(“#myForm”).validate();//设置验证器
var-rowindex=0;
$(“#添加新记录”)。单击(函数(){
var row=“输入名称=国家/地区”+行索引+“类型=文本/>”+
“输入名称=numberOfState_u3;”+行索引+“类型=文本/>”;
$(“#表”)。追加(行);
addRowRule(rowindex);
rowindex++;
});
函数addRowRule(行索引){
var country='#country'+行指数;
var numberOfState='#numberOfState'+行索引;
$(国家)。规则('添加'{
要求:正确,
信息:{
必填:“请输入国家/地区。”
}
});
$(numberOfState).rules('add'{
要求:正确,
CheckCountry和State:[国家,州编号],
信息:{
必填:“请输入状态编号。”
}
});
}
addMethod(“checkCountryAndState”),函数(值、元素、参数){
var varCountry=params[0];
var varNumberOfState=params[1];
if($(varCountry).val()=='America'和&$(varNumberOfState).val()!==50){
返回false;
}
返回true;
},jQuery.format(“国家与州编号不匹配”);
});
您可以使用规则
属性指定验证规则。这应该按照您在问题中指定的方法执行,例如:
$(".selector").validate({
rules: {
field2: {
required: true,
field1: {
depends: function(element) {
if ($('#field1').val() === 'A' && $('#field2').val() === 'Z') {
return false;
}
return true;
}
}
}
}
});
在此之后,如果验证失败,则需要使用
messages
属性分配一条消息。部分问题在于将无效对象放入.rules()
方法中。因为.rules()
方法已附加到选择器(表示单个字段),您不能为其中的其他字段声明规则
function addRowRule(i) {
var country = '#country_' + i,
var numberOfState = '#numberOfState_' + i;
$(country).rules('add', {
required: true,
numberOfState: { // <- you can NOT put this here
required: { ...
参考官方文档:特别是
消息
和规则
属性。Meskobalaz,我知道如何使用规则和消息验证来验证多个字段,但是规则字段名称没有行下标,那么jquery如何提取特定行进行验证呢?感谢Meskobalaz不知道为什么规则不需要指定表行的下标,因为有多个表行具有field1和field2名称。这是“.selector”吗允许jquery验证我在save button类上单击的行?谢谢。@Leanne,在表单
@Sparky中的每个输入上必须有唯一的名称
,请参阅我的相关代码,我为field1和field2提供了下标var rowindex,它是唯一的,可以验证每一行的各个字段。但是,不是确定如何一次验证多个相关字段。花了一整天的时间,但无法通过jquery文档和互联网找到答案,真的需要专家的建议。你知道怎么做吗?Thanks@Leanne,您的问题/问题非常不清楚。“如何一次验证多个相关字段?”是什么意思?@Leanne,是的,它们是独一无二的。请不要在评论中讨论。编辑您的问题以使其更清楚。解释有关出错原因的更多详细信息。显示您的.validate()
方法和其他相关的表单
标记。感谢您的反馈。我已经更改了上述代码,现在是否正确,并且能够验证country=America和numberOfState对于每个表行必须为50?@Leanne,我认为它是正确的。但是,我将您的OP回滚到了以前的版本,因为如果您继续修复它为了匹配答案,整个事情对未来的读者来说变得毫无意义。你应该创建一个JSFIDLE和/或在OP后面添加任何新信息。Sparky,非常感谢你的建议。只是为了确认“checkCountryAndState:[country,numberOfState]”语句是正确的
function addRowRule(i) {
var country = '#country_' + i,
var numberOfState = '#numberOfState_' + i;
$(country).rules('add', {
required: true,
numberOfState: { // <- you can NOT put this here
required: { ...
function addRowRule(i) {
var country = '#country_' + i,
var numberOfState = '#numberOfState_' + i;
$(country).rules('add', {
required: true,
....
});
$(numberOfState).rules('add', {
required: true,
....
});
....