我有以下功能:
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(i <= 10),所以它完成了第一个,我得到了11,然后它调用了该函数。 如何正确发送参数?(list_nr参数与for中的i相同,因为它被评估)。
答案 0 :(得分:0)
问题是您的索引(i
)在函数外部声明,而不是每个实例都是私有的。在你的情况下,所有函数最终使用最后一个函数。
这可以通过.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
的私有实例。