setTimeout()不能用于jQuery(this)

时间:2017-02-05 11:07:00

标签: javascript jquery settimeout removeclass

我在这里有这个脚本,我想在我的ul元素上滑动,然后在执行上滑后,我想删除“开放”类,因为CSS原因。我做错了什么?

Content-Disposition: attachment; filename=foo

3 个答案:

答案 0 :(得分:2)

你回调函数里面的

this是指全局对象,而不是事件目标。

两种解决方案:

使用箭头功能(保留this上下文):

jQuery(this).parent().children("ul").slideUp(500);
setTimeout(() => {
  var elementToRemove = jQuery(this).parent();
  elementToRemove.removeClass("open");
}, 500);

或保存指向this对象的链接:

jQuery(this).parent().children("ul").slideUp(500);
let that = this;
setTimeout(function(){
  var elementToRemove = jQuery(that).parent();
  elementToRemove.removeClass("open");
}, 500);

答案 1 :(得分:2)

解决方案1 ​​

使用bind将上下文传递给函数

jQuery(this).parent().children("ul").slideUp(500);

var func = function(){
  var elementToRemove = jQuery(this).parent();
  elementToRemove.removeClass("open");
}
setTimeout(func.bind(this),500);

解决方案2

jQuery(this).parent().children("ul").slideUp(500);
var self = this;
setTimeout(function(){
  var elementToRemove = jQuery(self).parent();
  elementToRemove.removeClass("open");
}, 500);

答案 2 :(得分:2)

jQuery动画允许在动画完成后将执行的文档中另外一个名为complete的可选参数(回调)。您可以像这样使用它:

jQuery(this).parent()
            .children("ul")
            .slideUp(500, function(){
                var elementToRemove = jQuery(this).parent();
                elementToRemove.removeClass("open");
            });