Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему объект "Кнопка" не видит соседнию фун-ю? (https://javascript.ru/forum/misc/16315-pochemu-obekt-knopka-ne-vidit-sosedniyu-fun-yu.html)

Игорь Александрович 03.04.2011 19:57

Почему объект "Кнопка" не видит соседнию функцию?
 
Это пользовательский скрипт (ФФ3.6). Создает клон кнопку. Когда её жмёшь, обработчик события onclick не видит "свою" функцию - появляется ошибка - PosilkaFlotika is not defined.

Эту функцию везде перемещал по скрипту. Здесь на сайте прочёл, что функции вида function PosilkaFlotika() { ....} считаются глобальными. Как её сделать видимой для кнопки?

Или по другому: ХТМЛ объект не видит нужную ф-ю из скрипта пользователя. Помогите кто может, уже третий день парюсь...

(function()
{
	var unsafe = window;
	try {unsafe = unsafeWindow} catch (e) {}
	     
	var $ = unsafe.$;
	var session = unsafe.session;

	if ( !$ ) return;				

	try {
	

		function PosilkaFlotika()
       	{
		    sendShips(6, 2, 62, 12, 1, 1);
		    
	    };
				
        var objButton = $('#menuTable li').eq(1).clone(true);
        objButton.find('.menu_icon').html('');
        objButton.find('.menubutton')
            .removeClass('selected')
            .attr('href', '#')
			.attr('onclick', 'PosilkaFlotika(); return false')
			.attr('target', '_self')
            .find('.textlabel').html('Messaga : ');			
        objButton.appendTo('#menuTable');
		
    }
   	catch (e) {}
}) ()

monolithed 03.04.2011 23:39

function foo() {
    alert(true);
}
foo();

(function() {
    function foo(a) {
        alert(a);
    }
    foo(false); //а тут есть
}());

foo(true); //нет такой функции в данной области видимости


Читать тут

Игорь Александрович 04.04.2011 18:34

function asd() 
{
    .........				
     /*	function PosilkaFlotika()
		{
		    sendShips(6, 2, 62, 12, 1, 1);
		};		
     */
    ..........        
} 
	asd() 
	function PosilkaFlotika()
	{
	   sendShips(6, 2, 62, 12, 1, 1);
	};


Так тоже undefined.

Изначально весь код был рабочим - но когда я завернул sendShips() в функцию PosilkaFlotika() - пошли undefined.

П.С. Все пользовательские скрипты подключены через аддон Greasemonkey, но он работает без проблем, может он влияет?

Игорь Александрович 04.04.2011 18:55

Кто знает как добавить в обработчик события onclick прямой путь на ф-ю в скрипте пользователя?

melky 04.04.2011 19:34

el.onclick = a

function a(){...}

Игорь Александрович 04.04.2011 20:36

А с прямым путем к файлу как?

Игорь Александрович 05.04.2011 03:20

Опера видит var вне общей функции, но ф-ии не видит.
А ФФ не видит ни того, ни другого...


Да блин....Обезъяны, лисы,...где люди делающие браузеры? Ау.js...

monolithed 05.04.2011 08:42

Цитата:

Сообщение от Игорь Александрович
Да блин....Обезъяны, лисы,...где люди делающие браузеры? Ау.js...

если у вас что-то не получается не нужно искать виноватых:

function foo() {
    alert(true);
}

function bar() {
    foo();
}

bar();

function bar(foo) {
    foo();
}

bar(function(a) {
    alert(true);
});

function foo() {
    alert(true);
}

function bar() {
    return function() {
        return function() {
            foo();
        }  
    } 
}

bar()()();

Игорь Александрович 05.04.2011 21:15

Нашёл инфо - "А Greasemonkey принудительно заворачивает весь код в функцию:
(function() { некий_код; })()."

Поэтому и блин! Кодер думает, что скрипт его просто подключен, а он ещё и обёрнут! :write: :cray: :-/

bar()()() - это не понятно, если коротко что это?

melky 05.04.2011 21:26

Цитата:

Сообщение от Игорь Александрович (Сообщение 99425)
bar()()() - это не понятно, если коротко что это?

это замыкания ( колоши, клошуры)

javascript.ru/basic/closure

одним словом, это ах***но !!!


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