Autor Zpráva
Matmak
Profil
Plánuji si naprogramovat dynamické generování odkazů podle počtu prokliků, ale to je jedno. Když se nedostanu k tomu, abych každému odkazu přiřadil event listener. Ke kódu: mám tu dvě smyčky v té druhé se vypíší správně links[i] jako i s hodnotami 0, 1, 2 ale když to i chci v první smyčce zapsat jako argument funce executeLink(i), ale i po dokončení smyčky je 3 a potom alert vyhazuje 3 u všech tří odkazů. Jak tomu můžu předejít? Předem děkuji za odpovědi.
var links = document.links;
function executeLink(link) {
    alert(link);
}
for(var i=0; i<links.length; i++) {
links[i].addEventListener("mouseover", function(){executeLink(i);});
}
for(var i=0; i<links.length; i++) {
document.getElementById("demo").innerHTML += "link "+i+links[i] + "<br>";
}
živá ukázka: Živá ukázka
Dan Charousek
Profil
for(var i=0; i<links.length; i++) {
    links[i].addEventListener("mouseover", (function(a) {
        return function() {executeLink(a);}
    })(i));
}
Matmak
Profil
Skvělé přesně to jsem potřeboval, moc děkuji.
Radek9
Profil
Matmak:
Ještě uvedu pár dalších možností.

Pokud je zajištěna existence metody bind na funkcích (od IE 9, případně při použití polyfilu):
for (var i = 0; i < links.length; i++) {
  links[i].addEventListener("mouseover", executeLink.bind(null, i));
}

Pokud jsou k dispozici block-scoped proměnné (prohlížeče s podporou ES6, případně při použití Babelu):
for (let i = 0; i < links.length; i++) {
  links[i].addEventListener("mouseover", function () { executeLink(i); });
}

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:

0