Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2010, 20:43
Аспирант
Отправить личное сообщение для KamaZz Посмотреть профиль Найти все сообщения от KamaZz
 
Регистрация: 22.06.2010
Сообщений: 47

Цикл, не работает без алерта.
var planet = document.getElementById('rechts').getElementsByClassName('smallplanet');
var planet_id = new Array();
var planet_pics = new Array();
var planet_name = new Array();
var planet_coords = document.getElementsByClassName('planet-koords')[0].innerHTML;
var moon_id = new Array();
var moon_pics = new Array();
var moon_name = new Array();
var moon_coords = new Array();
var planet_count = 0;
var moon_count = 0;
var planet_number = 0;
var moon_number = 0;

for (var i = 0; i <= planet.length; i++) {
	planet_id[i] = planet[i].innerHTML.split('moonlink')[0].slice(planet[i].innerHTML.split('moonlink')[0].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[0].indexOf('" title'));
	planet_pics[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planetPic')[0].src;
	planet_name[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-name')[0].innerHTML;
	planet_coords[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-koords')[0].innerHTML;
	if (planet[i].innerHTML.indexOf('src="img/planets/moon/') > 0) {
		moon_id[i] = planet[i].innerHTML.split('moonlink')[1].slice(planet[i].innerHTML.split('moonlink')[1].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[1].indexOf('" title'));
	}
}

alert(moon_id[3]);


Так как указано в примере не хочет работать, выдает:
Код:
Error: planet[i] is undefined
Но если вставить alert в тело цикла, цикл без проблем обрабатывается.
Подскажите пожалуйста, в чём я ошибся?
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2010, 20:51
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

потому что объекты еще не доступны.
запускайте скрипт после загрузки страницы, или хотя бы необходимых вам элементов
Ответить с цитированием
  #3 (permalink)  
Старый 12.07.2010, 23:05
Аспирант
Отправить личное сообщение для KamaZz Посмотреть профиль Найти все сообщения от KamaZz
 
Регистрация: 22.06.2010
Сообщений: 47

В таком случае почему, если alert вставить в тело цикла, все объекты считаются загруженными, и нормально выдают нужный мне результат?

Скрипт работает из под GreaseMonkey...
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2010, 00:52
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

за то время пока вы смотрите на алерт, успевает загрузится HTML_код страницы
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2010, 02:50
Аспирант
Отправить личное сообщение для KamaZz Посмотреть профиль Найти все сообщения от KamaZz
 
Регистрация: 22.06.2010
Сообщений: 47

Добавил onLoad... Ситуации это не изменило...

С Alert - работает.
onLoad = get_vars();

function get_vars () {
	for (var i = 0; i <= planet.length; i++) {
		planet_id[i] = planet[i].innerHTML.split('moonlink')[0].slice(planet[i].innerHTML.split('moonlink')[0].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[0].indexOf('" title'));
		planet_pics[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planetPic')[0].src;
		planet_name[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-name')[0].innerHTML;
		planet_coords[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-koords')[0].innerHTML;
		if (planet[i].innerHTML.indexOf('src="img/planets/moon/') > 0) {
			moon_id[i] = planet[i].innerHTML.split('moonlink')[1].slice(planet[i].innerHTML.split('moonlink')[1].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[1].indexOf('" title'));
		}
		alert(moon_id[3]);
	}
}


Без Alert - не работает.
onLoad = get_vars();

function get_vars () {
	for (var i = 0; i <= planet.length; i++) {
		planet_id[i] = planet[i].innerHTML.split('moonlink')[0].slice(planet[i].innerHTML.split('moonlink')[0].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[0].indexOf('" title'));
		planet_pics[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planetPic')[0].src;
		planet_name[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-name')[0].innerHTML;
		planet_coords[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-koords')[0].innerHTML;
		if (planet[i].innerHTML.indexOf('src="img/planets/moon/') > 0) {
			moon_id[i] = planet[i].innerHTML.split('moonlink')[1].slice(planet[i].innerHTML.split('moonlink')[1].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[1].indexOf('" title'));
		}
	}
}


Не могли-бы вы посоветовать что-то более конкретное?
т.к. насколько мне известно GreaseMonkey подгружает скрипт после загрузки страницы, хотя возможно я не прав.

Последний раз редактировалось KamaZz, 13.07.2010 в 02:56.
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2010, 06:27
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Во-первых, не onLoad, а window.onload. Во-вторых, вы опять же запускаете функцию до загрузки страницы.

window.onload = get_vars;
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2010, 12:52
Аспирант
Отправить личное сообщение для KamaZz Посмотреть профиль Найти все сообщения от KamaZz
 
Регистрация: 22.06.2010
Сообщений: 47

window.onload = get_vars;
Error: Component is not available

window.onload = get_vars();
Error: planet[i] is undefined
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2010, 14:47
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

Сообщение от KamaZz Посмотреть сообщение
window.onload = get_vars;
Error: Component is not available

window.onload = get_vars();
Error: planet[i] is undefined
а так?
window.onload = function(){
  get_vars();
}
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2010, 15:31
Аспирант
Отправить личное сообщение для KamaZz Посмотреть профиль Найти все сообщения от KamaZz
 
Регистрация: 22.06.2010
Сообщений: 47

Error: Component is not available
Line: 42
window.onload = function(){


window.onload = function(){
  for (var i = 0; i <= planet.length; i++) {
        planet_id[i] = ....
  }
}

Тоже самое...

Вот весь код:

var url = location.href;
var nickname = document.getElementById('playerName').getElementsByClassName(
		'textBeefy')[0].innerHTML;
var server = url.split('/')[2];
var uni_name = document.getElementsByTagName('title')[0].innerHTML;
var address = url.split('/')[4];
var page = address.match(/page=([^&]+)/);
var session = address.match(/session=(.+)$/);
var planet = document.getElementById('rechts').getElementsByClassName('smallplanet');
var planet_id = new Array();
var planet_pics = new Array();
var planet_name = new Array();
var planet_coords = document.getElementsByClassName('planet-koords')[0].innerHTML;
var moon_id = new Array();
var moon_pics = new Array();
var moon_name = new Array();
var moon_coords = new Array();
var planet_count = 0;
var moon_count = 0;
var planet_number = 0;
var moon_number = 0;


window.onload = function(){
	  get_vars();
	}

function get_vars () {
	for (var i = 0; i <= planet.length; i++) {
		planet_id[i] = planet[i].innerHTML.split('moonlink')[0].slice(planet[i].innerHTML.split('moonlink')[0].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[0].indexOf('" title'));
		planet_pics[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planetPic')[0].src;
		planet_name[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-name')[0].innerHTML;
		planet_coords[i] = planet[i].getElementsByClassName('planetlink')[0].getElementsByClassName('planet-koords')[0].innerHTML;
		if (planet[i].innerHTML.indexOf('src="img/planets/moon/') > 0) {
			moon_id[i] = planet[i].innerHTML.split('moonlink')[1].slice(planet[i].innerHTML.split('moonlink')[1].indexOf('&amp;cp=')+8, planet[i].innerHTML.split('moonlink')[1].indexOf('" title'));
		}
	}
}


Всё что идёт до функции без проблем парситься и выводиться через те-же alert'ы...
Но сама функция не хочет...

GreaseMonkey, Firefox/3.6.6
Ответить с цитированием
  #10 (permalink)  
Старый 13.07.2010, 15:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от KamaZz
for (var i = 0; i <= planet.length; i++) {
Строго меньше должно быть, как минимум.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java-скрипт для поиска. 2oo Общие вопросы Javascript 25 11.12.2010 13:10
Подскажите карусель, которая работает без какого либо фреймворка Khmelevsky Библиотеки/Тулкиты/Фреймворки 2 25.04.2010 12:45
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32