如何在javascript中将变量传递给函数

时间:2014-02-14 15:04:15

标签: javascript

如何将id传递给以下javascript代码中的函数?

for(var i = 1; i<=10; i++){     
    var id = i;
        $("#result-" + id).click(function(event){
        makeFeatureSelected(id, true);
    });
}

这样,id的值总是11。

感谢。

4 个答案:

答案 0 :(得分:1)

优雅的解决方案可能是:

var makeFeatureSelected = function(id, val) {
  console.log(id);
}

$('[id^="result-"]').on('click', function() { 
    var id = $(this).attr('id').split('-')[1];
    makeFeatureSelected(id, true);
});

<强>解释

  • $('[id ^ =“result-”]')JQuery的选择器:选择所有id以字符串“result - ”开头的元素
  • $(this).attr('id')。split(' - ')[1]:分割id元素的字符串并取第二个值,在你的情况下是id;

<强>加
如果你想只用10个第一个id做一些事情,你可以添加一个if块来检查id。

答案 1 :(得分:0)

我认为这就像将ID作为参数传递给你的函数一样简单。

for(var i = 1; i<=10; i++){     
    var id = i;
        $("#result-" + id).click(function(event, id){
        makeFeatureSelected(id, true);
    });
}

答案 2 :(得分:0)

为什么不从ID中提取它?

for(var i = 1; i<=10; i++){     

        $("#result-" + id).click(function(event){
        var id = $(this).attr('id').match(/\d+/)[0];
        makeFeatureSelected(id, true);
    });
}

这样你就可以跳过for循环并只为所有结果元素分配一个类。或许有点整洁?

答案 3 :(得分:0)

在您的代码片段中,id始终为11,因为在循环中定义函数时会形成闭包。 这是javascript中常见的错误。

解决这个问题的方法是进一步使用闭包。

function makeSelectedCallback(id){
    return function(){
        makeFeatureSelected(id, true);
    }
}

function yourExistingLoopLogic(){
    for(var i = 1; i<=10; i++){     
        var id = i;
        $("#result-" + id).click(function(event){
            makeSelectedCallback(id, true);
        });
    }
}

详细阅读Mozilla closure guide涵盖闭包的内容