user4584963
user4584963

Reputation: 2523

How to use .submit() when the event is triggered by code

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

Answers (2)

user4584963
user4584963

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

GuybrushThreepwood
GuybrushThreepwood

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

Related Questions