【问题标题】:Jquery show() doesn't wait until completeJquery show() 不会等到完成
【发布时间】:2015-01-09 22:09:59
【问题描述】:

我想要以下顺序:

  1. 显示带有黄色 css 类的 div 元素
  2. 在 ca 期间运行一个函数女巫。 5 秒
  3. 删除黄色类并添加绿色css类“状态Ok”...

当我运行我的代码时,在函数完成之前不会出现 div 容器。我还没有观察到?

function sleepFor(sleepDuration) {
    var now = new Date().getTime();
    while (new Date().getTime() < now + sleepDuration) { /* do nothing */ }
}



function DoIt() {
    $('#divState').show(100, function() {});
    sleepFor(1000);    
    $("#divState").removeClass("Yellow").addClass("Green");
}
div {
    display: none;    
}


div.Green {
    border: 1px solid black;
    background-color: #93EEAA;
}

div.Yellow {
    border: 1px solid black;
    background-color: #FFEE99;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" class="button" onclick="DoIt()" value="run" />
<div class="Yellow" id="divState">Some Text</div>

【问题讨论】:

  • 您应该在removeClass() 调用中指定要删除的类。
  • 你在 div 上有 display:none,所以在 show() 函数之前它不会显示
  • @RaYell: 结果还是一样.. :(
  • @atmd 是的。但我从 show() 开始...但它不显示 de div-element

标签: javascript jquery html css show-hide


【解决方案1】:

我假设您想展示您的元素,使用jquery.show 执行此操作,然后您可以延迟(如有必要使用jquery.delay),最后您可以排队(使用jquery.queue)删除“黄色”类和“绿色”类的添加。

function DoIt() {
    $('#divState').show(100).delay(1000).queue(function(){
          $(this).removeClass("Yellow").addClass("Green");
          $.dequeue(this)
      });
   
}
div {
    display: none;    
}


div.Green {
    border: 1px solid black;
    background-color: #93EEAA;
}

div.Yellow {
    border: 1px solid black;
    background-color: #FFEE99;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" class="button" onclick="DoIt()" value="run" />
<div class="Yellow" id="divState">Some Text</div>

【讨论】:

  • 一个小点,但在引号方面应注意一致性,这里有单引号和双引号的混合(以及在原始海报代码sn-p中)。
  • @HywelRees 我同意,但这与这个问题无关
  • 完美。 .queue() 是我需要的!非常感谢你!
【解决方案2】:

你为什么要空手而归?在 javascript 中,有一个本地方法可以等待一段时间,如果您只是在 google 上搜索它,您会立即找到它。

setTimeout(function() {
    $("#divState").removeClass("Yellow").addClass("Green");
},5000);

这会在执行定义的回调之前等待 5000 毫秒。然后,您可以像这样在单击按钮时执行此代码(假设您将按钮 ID 设为 myButton):

$("#myButton").click(function(){
    setTimeout(function() {
        $("#divState").removeClass("Yellow").addClass("Green");
    },5000);
});

这比使用 html 属性“onclick”要好得多,因为它是一种突兀的做法,因此是一种不好的做法。

【讨论】:

  • SleepFor() 函数仅用于演示。在我的应用程序中,还有另一个功能。 (从 SharePoint 列表中获取数据)
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2019-10-25
  • 2020-03-11
相关资源
最近更新 更多