Reputation: 2523
In my rails app I have a form in a modal that looks like this:
<div id="flag-user-modal" class="modal in" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4>Report user</h4>
</div>
<div class="modal-body">
Why are you reporting this user?
<form id="report-user-form" novalidate="novalidate" class="simple_form flag" action="/user_users/flag" accept-charset="UTF-8" method="post">
<div class="form-group hidden flag_user_user_id"><input value="26" class="hidden form-control" type="hidden" name="flag[user_id]" id="flag_user_id"></div>
<div class="form-group text required flag_reason" aria-required="true">
<textarea rows="2" class="text required form-control" name="flag[reason]" id="flag_reason" aria-required="true"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Cancel</button>
<button id="submit" class="btn btn-primary btn-disabler">
<span class="btn-label">Report</span>
</button>
</div>
</div>
</div>
</div>
I am submitting it with some jquery:
$('#flag-user-modal #submit').on('click', function() {
$('#flag-user-modal form').submit();
});
I am validating the form with jquery validate:
$('#report-user-form').validate({
rules: {
"flag[reason]": "required"
}
});
I want to disable the submit button on successful submit and show a loading indicator so users can't keep pressing submit, but I am running into trouble.
$('#report-user-form').on('submit', function() {
$(this).find('.btn-disabler')append("<i class='fa fa-spinner fa-pulse btn-loader'>").disable(true);
$(this).find('.btn-label').addClass('invisible');
});
I read that .submit() event doesn't fire when it's activated by code. That may or may not be the problem. Any ideas on how I can achieve the functionality I want -- to only disable the button and show loading fa-icon on successful submit and not when the jquery validator fails.
Upvotes: 0
Views: 61
Reputation: 2523
Looking into jquery validate I can use a submitHandler option to accomplish what I wanted.
$('#report-user-form').validate({
submitHandler: function(form) {
$('#report-user-form').find('.btn-disabler').append("<i class='fa fa-spinner fa-pulse btn-loader'>").disable(true);
$('#report-user-form').find('.btn-label').addClass('invisible');
form.submit();
},
rules: {
"flag[reason]": "required"
}
});
Upvotes: 0
Reputation: 153
$('#submit').on('click', function() {
validateForm();
});
$('#report-user-form').on('submit', function(event) {
validateForm();
});
function validateForm(){
if($("#flag_reason").val()!=""){
$('#report-user-form').find('.btn-disabler')append("<i class='fa fa-spinner fa-pulse btn-loader'>").disable(true);
$('#report-user-form').find('.btn-label').addClass('invisible');
}
}
Upvotes: 1