| Autor | Zpráva | ||
|---|---|---|---|
| Matmak Profil |
#1 · Zasláno: 30. 11. 2015, 19:06:59
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>";
} |
||
| Dan Charousek Profil |
#2 · Zasláno: 30. 11. 2015, 19:37:28
for(var i=0; i<links.length; i++) {
links[i].addEventListener("mouseover", (function(a) {
return function() {executeLink(a);}
})(i));
} |
||
| Matmak Profil |
#3 · Zasláno: 30. 11. 2015, 20:18:20
Skvělé přesně to jsem potřeboval, moc děkuji.
|
||
| Radek9 Profil |
#4 · Zasláno: 30. 11. 2015, 22:39:40
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); });
} |
||
|
Časová prodleva: 11 let
|
|||
0