Reputation: 103
jquery validate is not working with dynamic content
I use jquery to create tabs with new content.
var tabCounter = 2,
tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon- close'>Remove Tab</span></li>";
var tabs = $( "#tabs" ).tabs();
var tabContentHtml = $("#tabs-1").html();
Add new tabs when click button
$("#add_tab").click(function(){
addTab();
});
function addTab() {
var label = "Tab " + tabCounter,
id = "tabs-" + tabCounter,
li = $( tabTemplate.replace( /#\{href\}/g, "#" + id ).replace( /#\{label\}/g, label ) );
tabs.find( ".ui-tabs-nav" ).append( li );
tabs.append( "<div id='" + id + "'><p>" + tabContentHtml + "</p></div>" );
tabs.tabs( "refresh" );
tabCounter++;
}
Validate Form into tabs. It work with tabs-1 but not work with tabs-2
$("#Form").validate({
rules:{
name: "required",
messages:{
name: "Please enter your name"
},
errorElement: "div",
wrapper: "div",
errorPlacement: function(error, element) {
offset = element.offset();
error.insertBefore(element)
error.addClass('message'); // add a class to the wrapper
error.css('position', 'absolute');
error.css('left', offset.left + element.outerWidth());
},
submitHandler: function(form) {
form.submit();
}
});
Code HTML
<form id="Form" method="post" action="">
<div id="tabs">
<ul>
<li>
<a href="#tabs-1">Visa 1</a>
<!-- <span class="ui-icon ui-icon-close">Remove Tab</span> -->
</li>
</ul>
<div id="tabs-1">
<table class="content-tabs">
<tr class="fieldgroup">
<td>Full Name</td>
<td><input type="text" class="txtName" name="name"></td>
</tr>
<tr></td colspan="2"><input type="submit" value="submit" /></td></tr>
</table>
</div>
</div>
</form>
How to validate content into tabs-2 ?
Upvotes: 2
Views: 3356
Reputation: 21216
When you add your new tab, you need to manually add rules to validate for the new content. The easiest way is probably to use the rules method of the validation plugin.
At the bottom of your addTab
function, you would do something like this:
$('#'+id).find('input').rules('add',{
required: true
});
Upvotes: 1
Reputation: 774
The problem may be jquery is not aware of a dom update if you dont use live or on methods
try to put the validate method on an "on" click method like
$("#Form").on ('click',handler)
Please accept an answer as Laurence suggested
put like this
$("#Form").on("click", function(event){
$(this).validate({
rules:{
name: "required",
messages:{
name: "Please enter your name"
},
errorElement: "div",
wrapper: "div",
errorPlacement: function(error, element) {
offset = element.offset();
error.insertBefore(element)
error.addClass('message'); // add a class to the wrapper
error.css('position', 'absolute');
error.css('left', offset.left + element.outerWidth());
},
submitHandler: function(form) {
form.submit();
}
});
});
Upvotes: 0