function playing(pic_num)
{
alert(pic_num);
}
function initPic()
{
changePosition();
document.getElementById("pic5").style.visibility = "hidden";
var accountofpic = document.getElementById("container").children.length;
for (var i=1;i<=accountofpic;i++){
getElementsByClass("pic_part")[i - 1].onclick = function(){playing(i)};
}
}
我要实现的是当我点击pic_part1时playing函数返回1,单击pic_part2时,playing函数返回2,以此类推,我上面这个函数,每次不管点击那个图片,都显示10,也就是accountofpic+1的值。

解决方案 »

  1.   

    楼主我看不太懂你的意思,但是我觉得这是个分隔字符串的例子,你是不是要去pic_parti最后的这个i值啊,那你可以这样  var temp = pic_parti.indexOf("pic_part");
      var end = pic_parti.length;
      var i = pic_part.substring(temp,end);
      alert(i)
      

  2.   

    又见闭包经典问题。for (var i=1;i <=accountofpic;i++){
        getElementsByClass("pic_part")[i - 1].onclick = (function(v){return function(){playing(v)}})(i);
      

  3.   

    ...这种问题之前倒是很常见, 现在用jq了就没遇到这种问题了~. 
    $.live()lz加油
      

  4.   

    作用域问题
    for (var i=1;i<=accountofpic;i++){
          getElementsByClass("pic_part")[i - 1].onclick = (functioni(str){ return playing(str)})(i);
    }
      

  5.   

    有个克里化函数,也非常好用// func.curry(a, b).curry(c, d, e)(f, g, ...) == func(a, b, c, d, e, f, g, ...)
    Function.prototype.curry = function() {
    if (!arguments.length) return this;
    var _method = this;
    var _args = Array.prototype.slice.call(arguments);
    return function() {
    return _method.apply(this, _args.concat(Array.prototype.slice.call(arguments)) );
    };
    };function playing(pic_num) {
    alert(pic_num);
    }function initPic() {
    changePosition();
    document.getElementById("pic5").style.visibility = "hidden";
    var accountofpic = document.getElementById("container").children.length;
    for (var i=1;i<=accountofpic;i++){
    getElementsByClass("pic_part")[i-1].onclick = playing.curry(i);
    }
    }