[英]Passing loop variable as argument in element function
原諒標題,不確定要放什么。
我有一些類似的代碼:
var links=document.getElementsByTagName('a');
for(var i=0;i<links.length;i++){
var cur=links[i];
cur.onmouseover=function(){alert(i);};
}
我記得以前曾經見過類似的東西,但是我不知道如何去尋找它。 如果有人問過類似這樣的問題,我不會感到驚訝,並且希望知道該鏈接。
編輯:問題是循環結束后,它始終會警告“ i”是什么。 如果有兩個鏈接,它們都將發出警報2。
編輯:我記得在這里看到它: http : //nathansjslessons.appspot.com/ 。 很棒的幾課,我建議任何尚未做過的人。
嘗試這個:
var links=document.getElementsByTagName('a');
for(var i=0;i<links.length;i++){
var cur=links[i];
cur.onmouseover=function(a){
return function(){
alert(a);
}
}(i);
}
您實際上可以使用Array.forEach
:
var links=document.getElementsByTagName('a');
[].forEach.call(links, function(cur, i) {
cur.onmouseover = function() { alert(i); };
})
訣竅是使用.call()
,並將links
作為this
參數傳遞。
您需要為本身不支持它的舊版瀏覽器添加.forEach()
。
這是一個更可重用的解決方案。 記住3 r的減少重復使用回收;)它溢出到現實生活中。 看看哪個是最快的優化樂趣! http://jsperf.com/speed-test-for-links-script
var links = document.getElementsByTagName('a');
var linksLength = document.getElementsByTagName('a').length //cache the length means quicker for loop
var addMouseOver = function(i){
links[i].onmouseover=function(){
alert(i);
};
} //extract the function
for(var i=0;i<linksLength;i++){
addMouseOver(i);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.