Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中将变量传递给函数_Javascript - Fatal编程技术网

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

如何在javascript中将变量传递给函数,javascript,Javascript,在下面的javascript代码中,如何将id传递给函数 for(var i = 1; i<=10; i++){ var id = i; $("#result-" + id).click(function(event){ makeFeatureSelected(id, true); }); } for(var i=1;i我认为将ID作为参数传递给函数同样简单 for(var i = 1; i<=10; i++){

在下面的javascript代码中,如何将id传递给函数

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

for(var i=1;i我认为将ID作为参数传递给函数同样简单

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

for(var i=1;i为什么不从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(var i=1;i)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);
        });
    }
}
函数makeSelectedCallback(id){
返回函数(){
makeFeatureSelected(id,true);
}
}
函数yourExistingLoopLogic(){

对于(var i=1;i而言,优雅的解决方案可以是:

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]:单击元素的split id字符串并获取第二个值,在您的示例中为id
Plus

如果您只想使用10个第一个id执行某项操作,可以添加一个If块来检查id。

有关此解决方案的详细信息,此解决方案有效且灵活,因为结果可能少于10个。谢谢。