2015-12-16 74 views
0

我有如下因素的功能:功能參數不正確發送

function showPoster(element,list_nr) 
 
{ 
 
    var image ="url('../Login/" + movie_image[list_nr] + "'), auto"; 
 
    element.style.cursor = image; 
 
} 
 

 
function putNewContent(page) 
 
{ 
 
    for(var i = 1; i <= 10; i++) 
 
    { 
 
     document.getElementById("p"+i+1).onmouseover = function() { showPoster(this,(page-1)*10+i); } 
 
    } 
 
}

的問題是,當,例如,我運行putNewContent(1),它將調用功能showPoster() 10次,但是到達的參數showPoster()始終是11(我< = 10),所以它完成了第一次,我到達11,然後它ca功能。 我怎樣才能正確地發送參數?(list_nr參數與我在for中相同,因爲它被評估)。

回答

0

問題是您的索引(i)在函數之外聲明,而不是每個實例都是私有的。所有功能都以最後一個功能結束,在你的情況下爲10。

這可以用.bind()

function putNewContent(page) { 
    for (var i = 1; i <= 10; i++) { 
    document.getElementById("p" + i + 1).onmouseover = function(i) { 
     showPoster(this, (page - 1) * 10 + i); 
    }.bind(null,i) 
    } 
} 

或者關閉

function putNewContent(page) { 
    for (var i = 1; i <= 10; i++) { 
    document.getElementById("p" + i + 1).onmouseover = (function(i) { 
     return function() { 
      showPoster(this, (page - 1) * 10 + i); 
     } 
     } 
    })(i); 
} 

兩個待解決將保持i私有實例爲每個功能。

+0

我用.bind()的版本,它完美的工作。謝謝! – c0mm0s0r3