未捕获的TypeError:无法在'中使用'运营商搜索' height'在未定义

时间:2015-02-03 08:03:57

标签: javascript jquery

我有以下代码:

$('.p1').click(function(){
            var num = 10;
            var count = 0;
            var intv = setInterval(anim,800); 
            function anim(){
                count++;
                num--;
                if(num==0){clearInterval(intv);}
                $(this).hide(function(){
                    $(this).appendTo('#box_'+count);
                }).delay(500).fadeIn();

            }
            anim();
        });

我不知道,如果动画输入功能出现错误,请帮帮我

1 个答案:

答案 0 :(得分:2)

anim()函数没有this上下文。 click事件确实拥有它,但不会自动传递给您的其他函数。您可以使用.bind().call()

进行设置
var intv = setInterval(anim.bind(this),800);
...
...
anim.call(this);

.bind()用于setInterval行,因为您希望在设置this上下文时调用该函数(不调用它)。 .call()用于最后一行,因为您要调用该函数并设置this上下文。


或者,您可以将this上下文存储为另一个变量,使其可以在anim()函数中访问:

// in the click event
var element = this;
function anim(){
  count++;
  num--;
  if(num==0){clearInterval(intv);}
    $(element).hide(function(){
    $(element).appendTo('#box_'+count);
  }).delay(500).fadeIn();

}