2013-04-02 60 views
0

如果任何生成的字段为空,我正在生成我想要显示自定义错误消息的窗体区域。如何分组验证动态字段?

我生成的代码看起来像这样

<input type="text" id="Field1" name="Generated" /> 
<input type="text" id="Field2" name="Generated" /> 

等等

而我的验证码是像这样

$('#myform').validate({ 
    rules: { 
     Generated: { 
      required:true 
     } 
    }, 
    messages: { 
     Generated: { required : "Custom message." } 
    }, 
    groups: { 
     GeneratedGroup: "Generated" 
    }, 
    errorPlacement: function(error, element){ 
     if (element.attr("name") == "Generated"){ 
      $('#bottomOfGeneratedSectionDiv').append(error); 
     } else { 
      error.insertAfter(element); 
     } 
    } 
}); 

如果所有生成的字段为空,验证失败并显示错误消息。
如果填写了任何一个字段,验证通过并提交表单,这是意想不到的行为。

如何分组验证动态字段?

编辑
使用sparkies help和我的新errorPlacement代码。
这应该完成我的目标。

errorPlacement: function(error, element){ 
     if (element.attr("name").indexOf("Generated") >= 0){ 
      $('#bottomOfGeneratedSectionDiv').empty(); 
      $('#bottomOfGeneratedSectionDiv').append(error); 
     } else { 
      error.insertAfter(element); 
     } 
    } 
+0

我会建议使用自定义选择:http://stackoverflow.com/questions/15749419/jquery-validate-with-custom-selectors-and-logic但是我无法得到它工作http://jsfiddle.net/basarat/AnhPq/ – basarat

+1

名称必须是唯一的,并且向组添加字段的语法是错误的。检查文档 –

回答

2

字段名必须是唯一的这个插件才能正常工作。

HTML

<input type="text" id="Field1" name="Generated1" /> 
<input type="text" id="Field2" name="Generated2" /> 

jQuery的

$(document).ready(function() { 

    $('#myform').validate({ 
     rules: { 
      Generated1: { 
       required:true 
      }, 
      Generated2: { 
       required:true 
      } 
     }, 
     messages: { 
      Generated1: { 
       required: "Custom message." 
      }, 
      Generated2: { 
       required: "Custom message." 
      } 
     }, 
     groups: { 
      GeneratedGroup: "Generated1 Generated2" 
     } 
    }); 

}); 

DEMO:http://jsfiddle.net/xCY4T/


要添加规则动态添加字段,您将在创建字段后立即使用the rules('add') method。 (据我所知,有一个动态添加groups选项都没法)

$('[name="Generated2"]').rules('add', { 
    required:true, 
    messages: { 
     required: "Custom message." 
    } 
}); 

或者一次为许多新的领域,用“始于”选择和.each ...

$('[name^="Generated"]').each(function() { 
    $(this).rules('add', { 
     required:true, 
     messages: { 
      required: "Custom message." 
     } 
    }); 
}); 

简单的演示这种方法的:http://jsfiddle.net/xCY4T/1/


另一种方法是创建一个class使用the addClassRules method

$.validator.addClassRules("GeneratedRule", { 
    required: true 
}); 

然后,当你创建新的领域,确保他们每个都包含沿着class="GeneratedRule"具有独特name,当然。

<input type="text" name="Generated1" class="GeneratedRule" /> 
<input type="text" name="Generated2" class="GeneratedRule" /> 

这种方法很简单,但我看不到默认消息。

简单的演示:http://jsfiddle.net/xCY4T/2/

+0

的组部分,那么如何将这个写入'n'个生成的字段呢? –

+0

@BiffMaGriff,生成字段的代码必须确保创建唯一名称,然后调用规则('add')'方法将规则添加到新字段。查看我的编辑。 – Sparky