Reputation: 1863
I am using following jQuery code to submit a form via AJAX.
jQuery('form.AjaxForm').submit( function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
alert('Submitted')
},
error : function( xhr, err ) {
alert(''Error);
}
});
return false;
});
Code is working perfectly with no ajax. But does not work if I load form via ajax. I think it is because of loading form via ajax after JavaScript load.
Any solution?
Upvotes: 21
Views: 41496
Reputation: 171679
You can't attach handlers directly to html that doesn't exist
There are 2 ways to handle it.
Bind the handlers within success callback of ajax.
$(formParentSelector).load(formFileUrl, function() {
/* within this success callback the new html exists and can run code*/
AjaxForm();
});
function AjaxForm(){
jQuery('form.AjaxForm').submit( function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
alert('Submitted');
},
error : function( xhr, err ) {
alert('Error');
}
});
})
}
The other way is to delegate the handler to a higher level in the document so it is avalibale for future matching elements
jQuery(document).on('submit','form.AjaxForm').submit( function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
alert('Submitted');
},
error : function( xhr, err ) {
alert('Error');
}
});
})
Upvotes: 2
Reputation: 318182
If using jQuery 1.7+ you could try using .on() to delegate the event and bind to all future forms with the same class. Try finding the closest parent that is not inserted dynamicly instead of $(document).
$(document).on('submit', 'form.AjaxForm', function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
alert('Submitted');
},
error : function( xhr, err ) {
alert('Error');
}
});
return false;
});
Upvotes: 43