Dynamic onClick
5 отговора
0 прегледа
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
Имам следния проблем:
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
Re: Dynamic onClick
ako проблема е само викането на removeElement() при зареждане, при онЛоад сетни някаква променлива да е тру, а в removeElement() сложи проверка за променливата.
Re: Dynamic onClick
МИсля, че правилния начин е
document.getElementById('div'+i).onclick=removeElement;
Тука сменяш onclick функцията на обекта, а не я изпълняваш. Като цъкнеш върху обекта фунцията ще се викне, но няма да можеш да предадеш параметъра.
За това може би е по-добре да си укажеш onclick inline в кода на всеки div.
И най-ярките личности си плащат тока.
document.getElementById('div'+i).onclick=removeElement;
Тука сменяш onclick функцията на обекта, а не я изпълняваш. Като цъкнеш върху обекта фунцията ще се викне, но няма да можеш да предадеш параметъра.
За това може би е по-добре да си укажеш onclick inline в кода на всеки div.
И най-ярките личности си плащат тока.
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
{
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
Re: Dynamic onClick
Благодаря за отговорите, но аз открих начин да проработи както аз искам:
document.getElementById('div'+i).onclick=new function("removeElement('"+i+"')");

document.getElementById('div'+i).onclick=new function("removeElement('"+i+"')");
Re: Dynamic onClick
А преди това бях открил много изкълчен начин. 
Вземам от [object MouseEvent] дивът който е кликнат и от масив си вземах къде се намира и т.н. и т.н. когато реших че е готово се оказа че...
при бозата IE не работи.
Вземам от [object MouseEvent] дивът който е кликнат и от масив си вземах къде се намира и т.н. и т.н. когато реших че е готово се оказа че...
при бозата IE не работи.