Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用动态规则验证多个表字段_Javascript_Jquery_Jquery Validate - Fatal编程技术网

Javascript 使用动态规则验证多个表字段

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函数使用动态规则代码同时验证动态国家

我有一个动态表,每行包含country和numberOfState字段。目前,我可以在单击“AddNewRecord”按钮后添加新记录并分别验证country和numberOfState字段(如必填),该按钮位于生成动态表唯一字段名的代码下方,即第一行的name=“country\u 0”、“numberOfState\u 0”,第二行的name=“country\u 1”、“numberOfState\u 1”等

要检查是否可以根据下面的addRowRule函数使用动态规则代码同时验证动态国家/地区和numberOfState字段(即国家/地区为美国,numberOfState必须为50)。提前谢谢

     $(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,
        ....
    });  
    ....