Ошибка 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 выдаёт: Цитата:
И еще, если я пишу: 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;'); } Цитата:
|
Цитата:
Цитата:
|
Метод getElementById определен только для объекта document.
Задавать обработчики событий лучше через addEventListener / attachEvent или задавая соответствующее свойство для узла. Тут Вам понадобятся замыкания (хотя можно обойтись без них). |
Браузер каким-то образом разделяет пространства имен скриптов сайта и моего скрипта?
|
А что вы подразумеваете под вашим скриптом?
|
Это скрипт под GreaseMonkey...
|
|
Пытался, но судя по всему моих познаний в 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 В Опере всё работает... |
|
Цитата:
window самого документа, используйте unsafeWindow |
if (page) { var buttons = document.getElementById("buttonz"); for (i = 0; i < page.length; i++) { try { buildings = buttons.getElementsByClassName(buildId + page[i][0]); buildings[0].firstChild.nextSibling.innerHTML += "<a href=\"javascript: setQueue('" + pagename + "', " + page[i][0] + ");\" title=\"|Поставить в очередь на постройку\" class=\"fastBuild tipsStandard feldwebel\"><img width=\"22\" height=\"14\" src=\"img/layout/pixel.gif\"><img width=\"22\" height=\"14\" src=\"img/layout/pixel.gif\"></a>"; } catch (e) { GM_log(e.message); } } } function setQueue(pagename, id) { GM_setValue('build', new Array(id, pagename)); alert(GM_getValue('build')); } В консоли выдает: Error: setQueue is not defined javascript: setQueue('station', 14); Судя по всему проблема опять с замыканием... Подскажите пожалуйста как ее решить, т.к. по примерам статьи ничего не понятно... |
Функция setQueue объявлена внутри замыкания? Если да, то надо добавить
window.setQueue = setQueue; |
Замыкание возникает внутри цикла?
Если да, то она вне замыкания... Просто при вызове этой функции (на ссылку жму), в консоли пишется что функция не объявлена... |
Функция и ее вызов находятся в одной области видимости...
Я имею ввиду что ни цикл, ни функция не находятся внутри другой функции... |
Помогло unsafeWindow.setQueue = setQueue;
Цитата:
Существуют-ли другие способы решения этой проблемы? |
Error: missing formal parameter
Line: 1, Column: 10 Source Code: (function('station', 21) { return function() { setQueue('station', 21); } })(1); "<a href=\"#\" onclick=\"(function('" + pagename + "', " + page[i][0] + ") { return function() { setQueue('" + pagename + "', " + page[i][0] + "); } })(" + i + ");\" class=\"fastBuild\">"; |
Цитата:
|
Error: missing ) after formal parameters (указатель показывает на квадратную скобку)
(function(pagename, page[i][0]) { return function() { setQueue('station', 14); } })(0); Error: missing formal parameter (указатель показывает на одинарную кавычку) (function('pagename', page[i][0]) { return function() { setQueue('station', 14); } })(0); |
KamaZz,
за вас тут ещё и синтаксические ошибки разбирать? Учебник почитайте, чтобы бред не писать. |
Прошу прощение, действительно глупость написал :)
Но замыкание не срабатывает... Зато ошибок уже не выдаёт... Укажите пожалуйста, где я еще обшибся? if (page) { var buttons = document.getElementById("buttonz"); for (i = 0; i < page.length; i++) { try { buildings = buttons .getElementsByClassName(buildId + page[i][0]); buildings[0].firstChild.nextSibling.innerHTML += "<a href=\"#\" onclick=\"(function(pagename, page) { return function() { setQueue('" + pagename + "', " + page[i][0] + "); } })(" + i + ");\" class=\"fastBuild\"><img width=\"22\" height=\"14\" src=\"img/layout/pixel.gif\"></a>"; } catch (e) { GM_log(e.message + "\nOccurred in function \"turnButtons\""); } } } //setQueue('sadasd', 1212); function setQueue(pagename, id) { /* * var array = new Array(id, pagename); GM_setValue('build', array); * alert(GM_getValue('build')); */ alert('test'); } |
Часовой пояс GMT +3, время: 10:39. |