功能参数未正确发送

时间:2015-12-16 20:18:15

标签: javascript function parameters arguments

我有以下功能:

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相同,因为它被评估)。

1 个答案:

答案 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的私有实例。