Dynamic onClick

5 отговора 0 прегледа
#1

Dynamic onClick

Не знам дали това е точното място за моя въпрос но не намерих по-подходящ клуб.

Имам следния проблем:
function removeElement(divNum) {
alert(divNum);
}

for (i=0;i<7;i++) {
document.getElementById('div'+i).className='ok_class';
document.getElementById('div'+i).onclick=removeElement(i);
}
В този случай още докато се зарежда страницата им се появява alert(0-7), а не на onClick.
Когато заменя:
document.getElementById('div'+i).onclick=removeElement(i);
с
document.getElementById('div'+i).onclick=function (i){removeElement(i)};

alert() се появява на onClick но извежда [object MouseEvent]

Пробвах и други варианти но не се получава резултата който искам.
Дори единият вариант ми връщаше за всеки div alert(8);

Ще бъда благодарен ако някой може да ми помогне.
Благодаря предварително.

-------------
Cheers
Отговор
в отговор на Prophy #2

Re: Dynamic onClick

ako проблема е само викането на removeElement() при зареждане, при онЛоад сетни някаква променлива да е тру, а в removeElement() сложи проверка за променливата.

Отговор
в отговор на Prophy #3

Re: Dynamic onClick

МИсля, че правилния начин е

document.getElementById('div'+i).onclick=removeElement;

Тука сменяш onclick функцията на обекта, а не я изпълняваш. Като цъкнеш върху обекта фунцията ще се викне, но няма да можеш да предадеш параметъра.

За това може би е по-добре да си укажеш onclick inline в кода на всеки div.

И най-ярките личности си плащат тока.
Отговор
в отговор на Prophy #4

Re: Dynamic onClick

function removeElement (divNum)
{
alert (divNum);
}

for (i = 0;i < 7;i++)
{
fn = function() {removeElement (i);};
document.getElementById('div' + i).className = 'ok_class';
try
{
document.getElementById ('div' + i).addEventListener ("click", fn, false);
}
catch (e)
{
document.getElementById ('div' + i).attachEvent ("onclick", fn);
}
}


Въвежда се отделна функция fn, защото attachEvent и addEventListener не приемат функции с аргументи. addEventListener - за ФФ, attachEvent - за ИЕ.

Because finance is numbers
Отговор
в отговор на Prophy #5

Re: Dynamic onClick

Благодаря за отговорите, но аз открих начин да проработи както аз искам:
document.getElementById('div'+i).onclick=new function("removeElement('"+i+"')");


Отговор
в отговор на Prophy #6

Re: Dynamic onClick

А преди това бях открил много изкълчен начин.
Вземам от [object MouseEvent] дивът който е кликнат и от масив си вземах къде се намира и т.н. и т.н. когато реших че е готово се оказа че...
при бозата IE не работи.

Отговор