我试图将onclick事件处理程序添加到复选框列表中。而不是警告我期望它的复选框ID(我点击的那个),它总是警告复选框号3,无论我点击哪个。为什么会这样,我怎样才能让它按照需要运行。当我点击复选框2时,我希望它提醒" 2" ...等等。
function component (componentId, displayType, parentId) {
this.componentId = componentId;
this.parentId = parentId;
this.displayType = displayType;
}
var components = [];
components.push(new component(0, null, null);
components.push(new component(1, null, null);
components.push(new component(2, null, null);
components.push(new component(3, null, null);
var arrayLength = components.length;
for (var i = 0; i < arrayLength; i++) {
var component = components[i];
jQuery('#questionnaireComponentId'+component.componentId).find('input:checkbox').click(
function(){
selectParentCheckbox(component.componentId);
}
);
}
function selectParentCheckbox(componentId){
alert(componentId);
}
答案 0 :(得分:1)
这是因为Allowed typed in LocalSettings。
您应该在每次迭代时传递参数,而不仅仅是在完成迭代之后。
for (var i = 0; i < arrayLength; i++) {
var component = components[i];
jQuery('#questionnaireComponentId' + component.componentId)
.find('input:checkbox')
.click(selectParentCheckbox.bind(null, component.componentId));
}
Javascript closures函数允许您命名click事件将调用的函数以及应将哪些参数传递给它。
与此问题无关,只是为了您的信息:我认为您误解了bind
的力量,因为您可以使用更好的方法。