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: 8 let
|
0