为什么我不能使用jquery延迟addClass和removeClass?

时间:2017-04-03 22:42:50

标签: javascript jquery

这是我的代码:

   $("#form_editor").addClass('abcd')
   $("#form_editor").delay(32000).removeClass('abcd')

如果我有第二行取消注释,则该类永远不会被应用。如果我将其注释掉,那么该类将按预期应用。似乎第二行完全没有任何延迟地执行,即忽略.delay(32000)

延迟是否适用于addClassremoveClass?我认为它会延迟对它后面的任何函数的调用,但显然不会立即执行。

1 个答案:

答案 0 :(得分:7)

你可以,但你需要queue()



$("#form_editor").addClass('abcd').delay(3200).queue(function() {
  $(this).removeClass('abcd');
});

.abcd:before{
  content:"abcd";
  background:red;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="form_editor">efgh....</div>
&#13;
&#13;
&#13;

或使用setTimeout方法:

&#13;
&#13;
var $formEditor = $("#form_editor"); // we plan to reuse it so let's cache it!

$formEditor.addClass('abcd'); // add

setTimeout(function(){
  $formEditor.removeClass('abcd');  // remove
}, 3200);
&#13;
.abcd:before{
  content:"abcd";
  background:red;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="form_editor">efgh....</div>
&#13;
&#13;
&#13;

jQuery动画(.animate,.fadeTo,fadeIn等...)添加到动画队列堆栈,一个jQuery内部函数,而不是处理&#34;接下来会是什么?&#34; (懒散地说),而其他&#34;无动画&#34; 方法(如.text(),addClass(),. on(),。click()等......)不要。

轻松记住.queue()将其视为.delay(2000, function(){ /*BAM!*/ }) /* well sadly, this does not works */

的缺失(实际上)回调功能