Javascript - 如何在作为参数传递的函数中使用时不覆盖var?

时间:2016-10-27 20:34:18

标签: javascript jquery

我有一个for循环,里面有一个var命名路径,我在一个函数中使用这个var,我作为另一个函数的参数传递,它看起来像这样:

for( ... ){
  var path = ...;
  $("<button>").html(path).click(function(){ ...want to use path here... }).appendTo(...);
}

问题是在for循环的每个新回合都覆盖了路径,我的全部函数看起来像这样:

this.goTo = function(path){
    that.path = path;
    that.files = [];
    that.selectedFiles = [];

    //Display path
    that.pathDiv.empty();
    var dirs = that.path.split("/");
    if(dirs.length > 1 && dirs[dirs.length-1].length == 0){
        dirs.splice(dirs.length-1, 1);
    }
    for(var d in dirs){
        var path = "/";
        for(var i=0;i<d;i++){
            if(dirs[i].length > 0){
                path += dirs[i] + "/";
            }
        }
        var name = "/";
        if(dirs[d].length > 0){
            path += dirs[d] + "/";
            name = dirs[d];
        }
        that.pathDiv.append($("<button>").html(name).click(function(){ console.log(path); that.goTo(path); }));
    }

    that.directoryContent.empty();
    serverUI.emit("getDirectoryContent", {path: that.path});
}

我不能在我的html标签中使用onClick属性,因为我需要访问触发函数的对象(那),任何想法?

1 个答案:

答案 0 :(得分:2)

您可以将路径作为属性附加到元素本身上,就像这样。

for( ... ){
  var path = ...;
  $("<button>").attr("path",path).html(path).click(function(){  
     $(this).attr("path")  // use it like this.
 ...want to use path here... }).appendTo(...);
}