Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с onclick (https://javascript.ru/forum/events/9469-problema-s-onclick.html)

Teledrug 19.05.2010 00:04

Проблема с onclick
 
Вот код:
ms=document.getElementById("menu").getElementsByTagName("a");
for (var i=0; i<ms.length; i++) {
	menus[i].onClick=ps(menus[i].href);
	menus[i].href="javascript:void(0)";
}
//Далее функция
function ps (k) {
	alert (k);
}

При загрузке страницы срабатывают события со всех ссылок, без всякого нажатия. В чём проблема?

Octane 19.05.2010 02:42

Цитата:

Сообщение от Teledrug
menus[i].onClick=ps(menus[i].href);

1. Вы вызываете функцию ps и присваиваете свойству onClick результат выполнения этой функции, т.е. undefined.
function ps (k) {
    //alert (k);
}

var result = ps("…");

alert(result);

// Все равно, что:
//menus[i].onClick = undefined;

Нужно передавать ссылку на функцию:
menus[i].onClick = ps;
Аргументы в обработчик события, как в функцию, передать не получится. Об этом дальше.


2. Обработчику события соответствует свойство onclick, а не onClick. JavaScript регистрозависимый.
menus[i].onclick = ps;


3. Чтобы ваш скрипт работал правильно, нужно будет использовать замыкания http://javascript.ru/basic/closure#p...-ispolzovaniya
for (var i=0; i<ms.length; i++) {
    menus[i].onсlick = function (href) {
        return function () {
            ps(href);
        };
    }(menus[i].href);
    menus[i].href="javascript:void(0)";
}


4. http://javascript.ru/unsorted/why_href_js_is_bad

Teledrug 19.05.2010 07:52

Спасибо, Octane, теперь всё работает!

К тому же javascript:void(0) заменил на return false.


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