Mira Thakkar
Mira Thakkar

Reputation: 359

Validate multidimensional array using jQuery validate plugin

I have created form like this :

<form>
    <div class='row user">
         <div class="col-md-6 col-sm-6 input-group">
                <input type="text" class="form-control" name="user[0][name]" placeholder="Enter speaker's name">
         </div>
         <div class="col-md-6 col-sm-6 input-group">
                <span class="input-group-addon" id="basic-addon1"><i class="fa fa-envelope"></i> </span>
                <input type="text" class="form-control" name="user[0][email]"  placeholder="Email">
         </div>
    </div>
    <button onclick="addMoreUser()" class="add-more">Add User</button>
</form>

On Clicking "Add User" button it will add one more div with class "user" and it's input as user[1][name] and user[1][email].

I want to validate email and name as required and email must be valid email format. For validation the code goes like here:

 $('form').validate({
    rules : {
        "user[][name]" : {
            required: true
        },
        "user[][email]" : {
            email: true,
            required : true,
        },
    },
    messages :{
        "user[][name]" : {
            required: "Name is Mandatory"
        },
        "user[][email]" : {
            email: 'Email must be valid email address',
            required : 'Email is Mandatory',
        },
    }
});

Can anyone please help me how to validate such multidimensional array using validate plugin? Any help would be appreciated.

Upvotes: 8

Views: 4570

Answers (2)

Sparky
Sparky

Reputation: 98738

First select all input elements that start with user. Use a jQuery .filter() to find all elements that end with name and email. Then use a jQuery .each() along with the .rules() method to loop through and apply the rules.

var user = $('input[name^="user"]');

user.filter('input[name$="[name]"]').each(function() {
    $(this).rules("add", {
        required: true,
        messages: {
            required: "Name is Mandatory"
        }
    });
});

user.filter('input[name$="[email]"]').each(function() {
    $(this).rules("add", {
        email: true,
        required: true,
        messages: {
            email: 'Email must be valid email address',
            required : 'Email is Mandatory',
        }
    });
});

DEMO: jsfiddle.net/upq6uk0h/

Upvotes: 9

Jenny
Jenny

Reputation: 663

When targeting more than one element, you must also use the jQuery .each() method.

 $('.form-control').each(function () { 
    $(this).rules("add", {
        required: true
    });
});

Upvotes: -1

Related Questions