0

I have a button name Assign agent button when i click on button a loader will appear for 3 second(with timeInterval function) and then after 3 second a modal will appear. The issue is when i click on assign button the loader appear and then disappear after 3 second but on second time when I click on assign button the loader appear but suddenly disappear in 1 or 2 second. Why the loader is not taking 3 second same as first click?

    <button type="button" value="edit" name="edit-btn" class="spin-modal clear-cookie"
                        onclick="spiner();"> Assign
                        Agent</button> <div class="loader-spiner-outer class-none-view">
    <div class="loader-box">
      <div class="spinner-border" role="status">
        <span class="sr-only">Loading...</span>
      </div>
    </div>
  </div> <div class="modal" id="myModal" style="display: none;">
    <div class="modal-dialog">
      <div class="modal-content">

        <!-- Modal Header -->
        <div class="modal-header">
          <h4 class="modal-title">Assign Lead</h4>
          <button type="button" class="close" data-dismiss="modal">&times;</button>
        </div>

        <!-- Modal body -->
        <form action="#" class="custom-add-form" method="post" style="padding:22px 0px 5px 0px;">
          <div class="col-12">
            <div class="form-group custom-form-group" style="width: 100%;">
              <label for="name">Assign Agent</label>
              <select class="form-control" id="sel1">
                <option>First</option>
                <option>Second</option>
                <option>Third</option>
                <option>Four</option>
              </select>
            </div>
            <div class="form-group custom-form-group" style="width: 100%;">
              <label for="name">Other</label>
              <input type="text" class="form-control" id="name">
            </div>
            <div class="col-12 no-pad-left-right">
              <div class="form-group text-right">
                <div class="submit-m-div">
                  <input type="submit" value="Submit" name="submit" class="add-cm-btn no-margin-top-btm">
                  <span class="skip-icon" style="bottom: 0px;"><i class="fas fa-angle-double-right"></i></span>
                </div>
              </div>
            </div>
          </div>
        </form>

        <!-- Modal footer -->
        <!-- <div class="modal-footer">
          <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
        </div> -->

      </div>
    </div>
  </div>

javascript/jquery code

function spiner() {
    $(".loader-spiner-outer.class-none-view").removeClass("class-none-view");
    setInterval(function() {
        $(".loader-spiner-outer").addClass("class-none-view");
    }, 800);
    setTimeout(function() {
        $("#myModal").show();
    }, 900);
};
$(".close").click(function() {
    $("#myModal").hide();
});
Karthik VU
  • 561
  • 5
  • 17

1 Answers1

0

Try this:

$(".close").click(function ()
{
  $("#myModal").hide();
});

function spiner()
{
  $(".loader-spiner-outer").addClass("class-none-view"); 
  setTimeout(function ()
  {
    $(".loader-spiner-outer").removeClass("class-none-view");
    setTimeout(function ()
    {
      $("#myModal").show();
    }, 3000);
  }, 3000);
}
.loader-spiner-outer
{
  display: none;
}
.loader-spiner-outer.class-none-view
{
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" value="edit" name="edit-btn" class="spin-modal clear-cookie"
                        onclick="spiner();"> Assign
                        Agent</button> <div class="loader-spiner-outer">
    <div class="loader-box">
      <div class="spinner-border" role="status">
        <span class="sr-only">Loading...</span>
      </div>
    </div>
  </div> <div class="modal" id="myModal" style="display: none;">
    <div class="modal-dialog">
      <div class="modal-content">

        <!-- Modal Header -->
        <div class="modal-header">
          <h4 class="modal-title">Assign Lead</h4>
          <button type="button" class="close" data-dismiss="modal">&times;</button>
        </div>

        <!-- Modal body -->
        <form action="#" class="custom-add-form" method="post" style="padding:22px 0px 5px 0px;">
          <div class="col-12">
            <div class="form-group custom-form-group" style="width: 100%;">
              <label for="name">Assign Agent</label>
              <select class="form-control" id="sel1">
                <option>First</option>
                <option>Second</option>
                <option>Third</option>
                <option>Four</option>
              </select>
            </div>
            <div class="form-group custom-form-group" style="width: 100%;">
              <label for="name">Other</label>
              <input type="text" class="form-control" id="name">
            </div>
            <div class="col-12 no-pad-left-right">
              <div class="form-group text-right">
                <div class="submit-m-div">
                  <input type="submit" value="Submit" name="submit" class="add-cm-btn no-margin-top-btm">
                  <span class="skip-icon" style="bottom: 0px;"><i class="fas fa-angle-double-right"></i></span>
                </div>
              </div>
            </div>
          </div>
        </form>

        <!-- Modal footer -->
        <!-- <div class="modal-footer">
          <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
        </div> -->

      </div>
    </div>
  </div>

And don't use setInterval(() => {}), because it is a repeating timer. Use setTimeout(() => {}), because this will only run once.

'setInterval' vs 'setTimeout'

Marian
  • 169
  • 10
  • its not working its run both loader and modal on same time that why i used setInterval to load loader first then modal – rajan chopra Aug 22 '19 at 05:18
  • Appears the loader and the modal in the same time when you press the Button? – Marian Aug 22 '19 at 05:21
  • I want to appear loader first after 3second the loader will be disappear and modal will appear. – rajan chopra Aug 22 '19 at 05:24
  • If the loader appears for 3 seconds, the modal when will appear? You say " loader will appear for 3 second and then after 3 second a modal will appear" and now you say other. I don't understand. – Marian Aug 22 '19 at 05:27
  • You want other 3 seconds after the loaded was hide? – Marian Aug 22 '19 at 05:39