How do I initiate Bootstrap Spinner on button and return to original state when data is returned to AJAX?

Viewed 197

I have a Bootstrap button that submit a form using jQuery AJAX, and return json values, and I need to change the button to a spinner and disable it when clicked and then return button to original state when the json data has been returned.

I have tried to initiate this on submit in the jQuery, but I am unable to get it to change the button, and I get no errors in the console.

My code I have so far :

  $(function() {
    var id = '1';
    $('#SharedMailGroupForm' + id).submit(function() {
      $("#SharedMailUpdateButton").prop("disabled", true);
      $("#SharedMailUpdateButton").html(
        `<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>`
      );
      $.post($(this).attr("action"), $(this).serialize(), function(jsonData) {
        // this is the callback, do all the work that depends on `jsonData` in here
        $('#SharedMailGroupColumn' + id).fadeIn("slow").removeClass("HiddenDIV");
        console.log(jsonData.Value1);
        setTimeout(function() {
          $('#SharedMailGroupColumn' + id).fadeIn("slow").addClass("HiddenDIV");
        }, 10000);
        $('#SharedMailGroupText' + id).html(jsonData.Value1);
      }, "json");
      $("#SharedMailUpdateButton").html(
        `<span><i class="far fa-save"></span>`
      );
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

<div class="input-group-append">
  <button id="SharedMailUpdateButton" class="btn btn-primary" type="submit" form="SharedMailGroupForm1" data-toggle="tooltip" data-placement="right" title="Gem Shared Mail Grupper"><span>Save</span></i></button>
</div>

1 Answers

As pointed out by @Swati and @Don't Panic the issue was quite simple to solve by moving line $("#SharedMailUpdateButton").html(<span>><i class="far fa-save"> after $('#SharedMailGroupText' + id).html(jsonData.Value1); .. Thanks guys :-)

Related