2010-12-08 4 views
7

Hallo, у меня есть что-то вроде этого:функция не определена в 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 не определен.
Почему?

ответ

22

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

var init = setInterval(cloudScroll, 270); 
0

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

var init = setInterval(cloudScroll, 270); 

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

2

Дайте этому попытку:

var init = setInterval(cloudScroll, 270); 

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

setInterval(scrollCloud, 250, clouds2); 

EDIT Partrick отметил, что IE не поддерживает передачу аргументов в вышеуказанном порядке. Удивленный я этого не сделал. В любом случае, использование mqsoh анонимной функции имеет значение. Потому что вы можете запустить данную функцию с аргументами вроде так:

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

черт возьми, я сейчас слишком медленный. Это второй вопрос, на который я ответил сегодня, когда кто-то избил его мясо :) – Zevan 2010-12-08 16:05:38

+2

Параметр дополнительных аргументов не поддерживается в IE . – user113716 2010-12-08 16:10:13

9

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

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

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

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