Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пните меня, пожалуйста. Не могу создать функцию. (https://javascript.ru/forum/misc/32598-pnite-menya-pozhalujjsta-ne-mogu-sozdat-funkciyu.html)

prowoke 22.10.2012 21:12

Пните меня, пожалуйста. Не могу создать функцию.
 
Здравствуйте. Вот у меня был повторяющийся код и чтобы он не повторялся я поместил его в функцию, получилось вот, что:
// Запускаем слайдшоу
	if ($('div#rotator ul li').length != 1) {
		rotateImg("rotator"); 	// Slider at aboutus
	}
	if ($('div#rotatorTop ul li').length != 1) {
		rotateImg("rotatorTop");
		theRotatorText();
	} 
	
});
function rotateImg(obj) {
	var obj = obj;
	theRotator();	
	function theRotator() {
		$('div#'+obj+' ul li').css({opacity: 0.0});
		$('div#'+obj+' ul li:first').css({opacity: 1.0});
		setInterval('rotate()',5000);
	}
	 
	function rotate() {    
		var current = ($('div#'+obj+' ul li.show')?  $('div#'+obj+' ul li.show') : $('div#'+obj+' ul li:first'));
		var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div#'+obj+' ul li:first') :current.next()) : $('div#'+obj+' ul li:first'));    
		next.css({opacity: 0.0})
		.addClass('show')
		.animate({opacity: 1.0}, 1000);
		current.animate({opacity: 0.0}, 1000)
		.removeClass('show');
	}
}


При запуске отладчик пишет:
Uncaught ReferenceError: rotate is not defined
. Ну как он не defined, если она определяется.

walik 22.10.2012 21:32

function test_two() {
   alert('Test Two');
}
      
function test() {
   setTimeout('test_one()', 500); // Вы так используете, не работает.
   setTimeout('test_two()', 1000); // вызываем функцию доступную в контексте window.
   setTimeout(test_three, 1500); // Передаем функцию которая будет выполнятся.
        
   function test_one() {
      alert('Test One');
   }
        
   function test_three() {
      alert('Test Three');
   }
}
      
test();


setTimeout выполняется в контексте window.
Так как вы создаете функцию внутри другой, то только там она и будет видна. Либо создавайте функцию по другому, либо указывайте ее по другому. См. примеры выше

a_l 22.10.2012 21:35

setInterval(rotate,5000);
И лучше используйте setTimeout.

prowoke 22.10.2012 22:04

Цитата:

Сообщение от a_l (Сообщение 211693)
setInterval(rotate,5000);
И лучше используйте setTimeout.

Чем лучше? За советы спасибо всем. У меня всё получилось сделать.

walik 22.10.2012 22:17

Цитата:

Сообщение от prowoke
Чем лучше?

Реальная пауза в setInterval


Часовой пояс GMT +3, время: 17:18.