簡體   English   中英

將循環變量作為元素函數中的參數傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM