函数未在setInterval中定义

时间:2010-12-08 16:00:39

标签: jquery setinterval

你好,我有这样的事情:

$(document).ready(function(){

 $("#all").height($(window).height()-60);

$('a').bind({
  mouseover:function(){
   $(this).stop().animate({opacity:0.8},500);
 },
 mouseout:function(){
   $(this).stop().animate({opacity:1},500);
 },
   click:function(){
 }
});


// CLOUDS SCROLL 

 function cloudScroll(){
     var current=parseFloat($('#clouds').css('left'));
     current += 1;
     $('#clouds').css("left",current);
 }

var init = setInterval('cloudScroll()', 270);

});

似乎很容易,但无论如何它返回:cloudScroll没有定义。
为什么呢?

4 个答案:

答案 0 :(得分:23)

尝试直接传递函数,使用字符串已经过时了:

var init = setInterval(cloudScroll, 270);

答案 1 :(得分:9)

setInterval在全局命名空间中执行,但您的云滚动功能在匿名document.ready函数中定义。

它应该解决你的问题,并且将函数引用传递给setInterval而不是字符串(最终会被唤醒,这对性能更糟)也是更好的形式:

setInterval(function (){ cloudsScroll() }, 270);

您还可以将cloudScroll定义放在区间函数中。

答案 2 :(得分:2)

尝试一下:

var init = setInterval(cloudScroll, 270); 

...如果你想传递参数:

setInterval(scrollCloud, 250, clouds2);

修改 Partrick提到IE不支持以上述方式传递参数。很惊讶我现在没有。无论如何,这使得mqsoh使用了与匿名函数相关的东西。因为您可以使用如下参数运行给定函数:

setInterval(function(){
  scrollCloud(clouds2);
}, 250);

答案 3 :(得分:0)

如果传递函数引用而不是字符串,那么它将起作用:

var init = setInterval(cloudScroll, 270);

只是为了表明它有效:http://jsfiddle.net/jonathon/T45Nx/