如何在javascript中将变量传递给函数
在下面的javascript代码中,如何将id传递给函数如何在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++){
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个。谢谢。