如何将id传递给以下javascript代码中的函数?
for(var i = 1; i<=10; i++){
var id = i;
$("#result-" + id).click(function(event){
makeFeatureSelected(id, true);
});
}
这样,id的值总是11。
感谢。
答案 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);
});
<强>解释强>
<强>加强>
如果你想只用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涵盖闭包的内容