Функция не определена в setInterval - PullRequest
7 голосов
/ 08 декабря 2010

Привет, у меня есть что-то вроде этого:

$(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 ]

23 голосов
/ 08 декабря 2010

Попробуйте передать функцию напрямую, использование строки довольно устарело:

var init = setInterval(cloudScroll, 270);
9 голосов
/ 08 декабря 2010

setInterval выполняется в глобальном пространстве имен, но ваша функция облачной прокрутки определена в анонимной функции document.ready.

Это должно решить вашу проблему, а также лучше передавать ссылки на функции в setInterval, а неСтроки (которые в конечном итоге выявляются, что ухудшает производительность):

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

Вы также можете поместить определение cloudScroll в функцию интервала.

2 голосов
/ 08 декабря 2010

Попробуйте:

var init = setInterval(cloudScroll, 270); 

... и если вы хотите передать аргументы:

setInterval(scrollCloud, 250, clouds2);

РЕДАКТИРОВАТЬ Партрик упомянул, что IE не '• Поддерживать передачу аргументов указанным выше способом.Удивлен, я не сделал этого сейчас.В любом случае, это делает использование mqsoh анонимной функции уместным.Потому что вы можете запустить данную функцию с такими аргументами:

setInterval(function(){
  scrollCloud(clouds2);
}, 250);
0 голосов
/ 08 декабря 2010

Если вы передадите ссылку на функцию, а не на строку, она будет работать:

var init = setInterval(cloudScroll, 270);

Просто чтобы показать, что она работает: http://jsfiddle.net/jonathon/T45Nx/

...