Html form where you will add dynamic fields:
<script type="text/javascript" src="<?php echo HTTP_FORM_VALIDATION_PATH; ?>js/jquery.validate.js"></script> <script src="http://cdn.jsdelivr.net/jquery.validation/1.15.0/additional-methods.min.js"></script> <!-- Custom script for phone number validation start --> <script type="text/javascript"> jQuery.validator.addMethod("phoneno", function(phone_number, element) { phone_number = phone_number.replace(/\s+/g, ""); return this.optional(element) || phone_number.length < 11 && phone_number.length > 9 && phone_number.match(/^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/); },"Please specify a valid phone number"); jQuery.validator.addMethod("money", function(value, element) { var isValidMoney = /^\d{0,7}(\.\d{0,2})?$/.test(value); return this.optional(element) || isValidMoney; },"Please enter a valid price (eg. 100.00)"); </script> <!-- Custom script for phone number validation Ends --> <!-- Form Validation End --> <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script> <script type="text/javascript" src="<?php echo base_url('assets/js/adddynamicelementscript.js'); ?>"></script> <?php $attributes = array('class' => 'form-horizontal', 'id' => 'finishgood_form'); ?> <?php echo form_open_multipart('admin/products/add_finish_good', $attributes);?> <div class="row panel"> <div class="col-sm-2 label-left"> </div> <div class="col-sm-4" > <button class="btn btn-primary" type="button" id="adddesign">Add Design</button> <button class="btn btn-primary" type="button" id="reset">Reset</button> </div> </div> <div id="InputsWrapper"> </div> <div class="row panel"> <div class="col-sm-2 label-left"></div> <div class="col-sm-4"> <div class="text-right"> <button class="btn btn-primary" type="reset">Reset</button> <button class="btn btn-primary" type="submit">Submit</button> </div> </div> </div> <?php echo form_close(); ?>
script for adding dynamic fields adddynamicelementscript.js:
$(document).ready(function(){ var InputsWrapper = $("#InputsWrapper"); var designfieldcount = 0; var colorfieldCount = 0; var designnamefield = $("#adddesign"); $(InputsWrapper).sortable(); $(designnamefield).click(function() { designfieldcount++; $(InputsWrapper).append( '<div class="row panel">'+ '<div class="col-sm-2 label-left"></div>'+ '<div class="col-sm-4" id= "design'+designfieldcount+'">'+ '<input type="hidden" id="de_color_id'+designfieldcount+'" class="de_color_id" name="de_color_id" value="'+designfieldcount+'">'+ '<div class="input-group design_'+designfieldcount+'">'+ '<input class="form-control designname" type="text" name="designname['+designfieldcount+']" id="design_' + designfieldcount + '" placeholder="Design ' + designfieldcount + '"/>'+ '<span class="input-group-btn" style="vertical-align: top">'+ '<button class="removedesign btn btn-danger">x</button>'+ '<button class="addcolor btn btn-primary">Add Color</button>'+ '</span>'+ '</div>'+ '</div>'+ '</div>' ); $(".designname").each(function(){ $(this).rules("add", { required:true, messages: { required: "Design Name is required" } }); }); return false; }); $("body").on("click", ".removedesign", function() { $(this).parent('span').parent('div').parent('div').parent('div').remove(); return false; }); $("body").on("click", ".addcolor", function() { colorfieldCount++; var de_id=$(this).parent('span').parent('div').parent('div').find("input[id*='de_color_id']"); var design_id = de_id.val(); $(this).parent('span').parent('div').parent('div').append( '<div class="col-sm-12 input-group color_'+colorfieldCount+'" id="color">'+ '<div class="col-sm-6">'+ '<input class="form-control colorname required" type="text" name="colorname['+design_id+'][]" id="design'+designfieldcount+'_color' + colorfieldCount + '" placeholder="Color"/>'+ '</div>'+ '<div class="col-sm-6">'+ '<input class="form-control colorprice required" type="text" name="colorprice['+design_id+'][]" id="design'+designfieldcount+'_price' + colorfieldCount + '" placeholder="Price"/>'+ '</div>'+ '<span class="input-group-btn" style="vertical-align: top">'+ '<button class="removecolor btn btn-danger">x</button>'+ '</span>'+ '</div>' ); $(".colorname").each(function(){ $(this).rules("add", { required:true, messages: { required: "Color Name is required" } }); }); $(".colorprice").each(function(){ $(this).rules("add", { required:true, money : true, messages: { required: "Color Price is required" } }); }); return false; }); $("body").on("click", ".removecolor", function() { $(this).parent('span').parent('div').remove(); return false; }); $("#reset").on("click", function() { $("#InputsWrapper").empty(); designfieldcount=0; colorfieldCount=0; }); });
Modify your jquery.validate.js as follow :
// checkForm: function() {
// this.prepareForm();
// for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
// this.check( elements[i] );
// }
// return this.valid();
// },
checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
this.check( this.findByName( elements[i].name )[cnt] );
}
}
else {
this.check( elements[i] );
}
}
return this.valid();
},
[/code]
0 Comments