Jquery验证 - 如何验证动态表单?

时间:2013-04-02 15:40:53

标签: jquery jquery-validate dynamic-forms

我是Jquery验证新手(http://docs.jquery.com/Plugins/Validation

我是一个动态的表格。我需要知道是否可以验证这样的表单:

<form ...>
<div class="multi-city">                        
    <div class="controls visible">
        <label for="id_form-0-city_input">City</label>
        <input type="text" name="form-0-city_input" class="city-input ui-autocomplete-input" id="id_form-0-city_input" autocomplete="off">
        <p style=""><a href="#" class="delete">Remove</a></p>
    </div>
    <input type="hidden" id="id_form-0-city" name="form-0-city">

    <div class="controls visible">
        <label for="id_form-1-city_input">City</label>
        <input type="text" name="form-1-city_input" class="city-input ui-autocomplete-input" id="id_form-1-city_input" autocomplete="off">
        <p style=""><a href="#" class="delete">Remove</a></p>
    </div>
    <input type="hidden" id="id_form-1-city" name="form-1-city">

    <div class="controls hidden">
        <label for="id_form-2-city_input">City</label>
        <input type="text" name="form-2-city_input" class="city-input ui-autocomplete-input" id="id_form-2-city_input" autocomplete="off">
        <p style=""><a href="#" class="delete">Remove</a></p>
    </div>                                    
</div>
</form>

基本上我需要验证“.controls.visible”。按代码:

$('.multi-city .controls.visible')

我应该使用什么策略来验证这些动态字段?

有什么想法吗?

最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

不完全确定你在问什么。 默认情况下,此插件将忽略任何隐藏字段。如果这些字段没有真正“隐藏”,那么您需要在创建或“删除”(隐藏?)这些字段时动态编辑规则。进行此类操作的唯一方法是使用已插入插件的方法...

  • rules('add')
  • rules('remove')

请参阅所有文档:http://docs.jquery.com/Plugins/Validation#Plugin_methods


要为动态添加的字段添加规则,您可以在创建字段后立即使用the rules('add') method

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

或者对于许多新字段,请使用“starts with”选择器和.each ...

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

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


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

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

然后,当您创建新字段时,请确保它们每个都包含class="MyRule"以及唯一的name

<input type="text" name="Field1" class="MyRule" />
<input type="text" name="Field2" class="MyRule" />

这种方法非常简单,但我认为无法覆盖默认消息。

简单演示:http://jsfiddle.net/xCY4T/3/