Autor Zpráva
anonymníí
Profil *
Ahoj,

mám kolekci elementů získanou z getElementsByTagName. Nyní bych potřeboval při kliku na některý z elementů dané kolekce, navěsit zavolání JS funkce. Nicméně, nedaří se onclick vyvolat.

var events = '...';
var ep = events.getElementsByTagName('p');
var links = new Array('1.html', '2.html', '3.html');

ep.onclick = function() {
    // klikl jsem na 2. odstavec, potřebuji přesměrovat na '2.html'
    var idx = ? // index odstavce v kolekci
    location.url = links[idx]; // presmerovat
}

Myslím si, že hlavní úkol bude získat index kliknutého prvku, ale to se mi nedaří. Zkoušel jsem hledat, ale našel jsem získání indexu jen průchodem celého pole/kolekce alá http://stackoverflow.com/a/8802111, ale to se mi moc nelíbí.
Radek9
Profil
anonymníí:
Nemůžeš navěsit event na kolekci. Řešením je buď opravdu projít kolekci těch elementů a každému nastavit event, nebo ten event dát na rodičovský element a zjišťovat target.
_es
Profil
anonymníí:
Vlastnosť onclick je treba nastaviť každému odkazu, napríklad cyklom for. Alebo použiť „prebublanie“ a rodičovský element. Cyklom by to mohlo ísť napríklad:
function() presmeruj {
    location.url = this.odkaz; // presmerovat
}
for(var i=0; i<links.length; ++i) {
  ep[i].odkaz = links[i]; ep[i].onclick = presmeruj;
}
Oba prístupy máš vo vlákne Provést událost při kliknutí na jakýkoliv odkaz v textu.
anonymníí
Profil *
Jo, tím cyklem to mám taky, resp. nemám problém to napsat.

Hledal jsem spíše něco ve smyslu [jakýkoliv element z kolekce].onclick = ..., ale to asi nepůjde. Jdu tedy do cyklu. Asi je správný, jen se mi jaksi nezdá výkonově - nemám to změřeno, jen subjektivní pocit.

Díky za potvrzení cyklu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: