功能参数未正确发送

function parameters not sent correctly

我有以下功能:

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); }
    }
} 

问题是,例如,当 i 运行 putNewContent(1) 时,它将调用函数 showPoster() 10 次,但是到达 showPoster() 的参数总是 11 (i<=10),所以它首先完成 for,i 得到 11,然后它调用函数。 我怎样才能正确发送参数 i ?(list_nr 参数与 for 中的 i 相同,因为它被评估)。

问题是您的索引 (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 的私有实例。