Вход

Просмотр полной версии : Установить события через цикл


DjTarik
31.03.2010, 15:07
Задача:

Есть список <input>-ов. Нужно после загрузки документа присвоить всем инпутам события "onclick", "onmouseover", "onmouseout".
Что только не пробовал - не получается в цикле сделать. Присваивает последнему элементу из цикла.

Подскажите:
1. Можно ли вообще такое сделать?
2. Каким методом нужно присваивать события?

Спасибо.

Kolyaj
31.03.2010, 15:24
http://javascript.ru/basic/closure#primer-oshibochnogo-ispolzovaniya

DjTarik
31.03.2010, 18:43
Спасибо, прочитал ещё раз. Сразу не смог разглядеть проблему) Пойду ещё поковыряюсь... Потом отпишу, что да как.

DjTarik
28.04.2010, 10:26
Ребята, нужен хелп.
Вроде во всём разобрался, всё понятно, сделал так:

function StylisedRadio()
{
var wrapper = document.getElementById('StylisedRadioWrapper');
var array = wrapper.getElementsByTagName('input');
for (var i = 0; i<array.length; i++)
{
var el = array[i]; // input
var neighbor = el.nextSibling; // label
var child = neighbor.firstChild; // span
el.className = 'hide-input';
if(el.checked)
{
child.className = 'radio-on';
(function(i){
neighbor.onmouseover = function ()
{
array[i].nextSibling.firstChild.className = 'radio-on-over';
};
neighbor.onmouseout = function ()
{
array[i].nextSibling.firstChild.className = 'radio-on';
};
})(i);
}
else
{
child.className = '';
(function(i){
neighbor.onmouseover = function ()
{
array[i].nextSibling.firstChild.className = 'radio-off-over';
};
neighbor.onmouseout = function ()
{
array[i].nextSibling.firstChild.className = '';
};
neighbor.onclick = function ()
{
array[i].checked = 'true';
StylisedRadio ();
};
})(i);

};
};
};

В в Opera_9.50, Opera_9.60, Opera_9.64 и Opera_10.10 не работает. Не могу понять почему? O_o Где я накосячил?

Для большей юзабельности - ссылка:
http://tarik.kasperovich.ru/test/index.html

Спасибо.

exec
28.04.2010, 10:58
var idList = ['id1', 'id2', 'id3'];
for (var i = 0; i < idList; i++) {
node = document.getElementById(idList[i]);
node.onclick = fn, node.onmouseover = fn, node.onmouseout = fn;
}