尝试使用jQuery向动态内容添加事件处理程序

时间:2015-09-15 19:05:34

标签: javascript jquery

我试图将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);
}

1 个答案:

答案 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的力量,因为您可以使用更好的方法。