Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ошибка function is not defined (https://javascript.ru/forum/misc/11706-oshibka-function-not-defined.html)

KamaZz 08.09.2010 16:02

Ошибка function is not defined
 
for (var i = 0; i < 14; i++) {
	document.getElementById('details' + fleet[i][0]).setAttribute('onclick', 'check(' + fleet[i][0] + '); return false;');
}

function check(fleet) {
	alert(fleet);
}

При нажатии на ссылку, FireFox выдаёт:
Цитата:

Error: check is not defined

И еще, если я пишу:
var fleetbox = document.getElementById('buttonz');
for (var i = 0; i < 14; i++) {
	fleetbox.getElementById('details' + fleet[i][0]).setAttribute('onclick', 'check(' + fleet[i][0] + '); return false;');
}

Цитата:

Error: fleetbox.getElementById is not a function

Kolyaj 08.09.2010 16:06

Цитата:

Сообщение от KamaZz
Error: check is not defined

Значит нет в глобальной области видимости функции check.

Цитата:

Сообщение от KamaZz
Error: fleetbox.getElementById is not a function

getElementById есть только у документа, т.к. id должен быть уникальным для всего документа.

B@rmaley.e><e 08.09.2010 16:07

Метод getElementById определен только для объекта document.
Задавать обработчики событий лучше через addEventListener / attachEvent или задавая соответствующее свойство для узла. Тут Вам понадобятся замыкания (хотя можно обойтись без них).

KamaZz 08.09.2010 16:42

Браузер каким-то образом разделяет пространства имен скриптов сайта и моего скрипта?

Kolyaj 08.09.2010 16:47

А что вы подразумеваете под вашим скриптом?

KamaZz 08.09.2010 16:52

Это скрипт под GreaseMonkey...

Kolyaj 08.09.2010 17:12

Назначайте обработчик нормально.

KamaZz 08.09.2010 17:18

Пытался, но судя по всему моих познаний в JavaScript недостаточно...

var fleet = new Array(13);

fleet[0] = new Array( 202, 2000, 2000, 0 );
fleet[1] = new Array( 203, 6000, 6000, 0 );
fleet[2] = new Array( 204, 3000, 1000, 0 );
fleet[3] = new Array( 205, 6000, 4000, 0 );
fleet[4] = new Array( 206, 20000, 7000, 2000 );
fleet[5] = new Array( 207, 45000, 15000, 0 );
fleet[6] = new Array( 208, 10000, 20000, 10000 );
fleet[7] = new Array( 209, 10000, 6000, 2000 );
fleet[8] = new Array( 210, 0, 1000, 0 );
fleet[9] = new Array( 211, 50000, 25000, 15000 );
fleet[10] = new Array( 212, 0, 2000, 500 );
fleet[11] = new Array( 213, 60000, 50000, 15000 );
fleet[12] = new Array( 214, 5000000, 4000000, 1000000 );
fleet[13] = new Array( 215, 30000, 40000, 15000 );

for (var i = 0; i < 14; i++) {
     document.getElementById('details' + fleet[i][0]).addEventListener('click', function() { check(fleet[i][0]) }, false);
}

var check = function(fleet) {
    alert(fleet);
}


В FireFox(GM), выдаёт.
Error: fleet[i] is undefined

В Опере всё работает...

Kolyaj 08.09.2010 17:27

http://javascript.ru/basic/closure#p...-ispolzovaniya

subzey 08.09.2010 21:08

Цитата:

Сообщение от KamaZz (Сообщение 70167)
Это скрипт под GreaseMonkey...

Да, грязномакаковские скрипты выполняется в отдельной области. Чтобы получить доступ к window самого документа, используйте unsafeWindow


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