函数setInterval()在第二次调用时无法正常工作

时间:2019-08-22 04:34:26

标签: javascript jquery

我有一个按钮名称,当我单击按钮时,加载程序将显示3秒钟(带有timeInterval函数),然后在3秒钟后出现模态。 问题是,当我单击分配按钮时,加载程序出现,然后在3秒后消失,但是当我单击分配按钮时,第二次加载程序出现,但突然在1或2秒后消失。 为什么加载程序没有花3秒钟的时间与第一次点击相同?

    <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代码

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();
});

1 个答案:

答案 0 :(得分:0)

尝试一下:

$(".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>

也不要使用setInterval(() => {}),因为它是一个重复计时器。 使用setTimeout(() => {}),因为它只会运行一次。

'setInterval' vs 'setTimeout'