Javascript 如何在for循环中附加onchange处理程序

Javascript 如何在for循环中附加onchange处理程序,javascript,event-handling,Javascript,Event Handling,我有一个for循环,它迭代表单中的依赖字段。该数组如下所示: var dependentFields = [ { parent: FLDID_LABEL, children: [FLDID_LABEL_TEMPLATE, FLDID_LABEL_INSTRUCTIONS], choiceTrigger: 'Yes', markAsReq: true }, { parent: FLDID_SHIP_TO, children: [FLDID_SHIP_TO_ADDR], choice

我有一个for循环,它迭代表单中的依赖字段。该数组如下所示:

var dependentFields = [
    { parent: FLDID_LABEL, children: [FLDID_LABEL_TEMPLATE, FLDID_LABEL_INSTRUCTIONS], choiceTrigger: 'Yes', markAsReq: true },
    { parent: FLDID_SHIP_TO, children: [FLDID_SHIP_TO_ADDR], choiceTrigger: 'No', markAsReq: true }
];
我有一个函数,它被调用来附加所有事件处理程序。为了简单起见,我将只显示问题发生的循环

function attachEventHandlers() {
    // begin dependent fields
    for (var i = 0; i < dependentFields.length; i++) {
        var o = dependentFields[i];
        $('#' + o.parent).change(function () {
            var visible = $('#' + o.parent + ' :selected').text() === o.choiceTrigger;
            for (var c = 0; c < o.children.length; c++) {
                var child = o.children[c];
                showField(child, visible);
                if (o.markAsReq && $('#' + child).val() === '') {
                    MarkFieldAsRequired(child);
                }
            }
        });
    }
}
函数attachEventHandlers(){
//开始相关字段
对于(变量i=0;i
只有第二个相关字段有效,而第一个字段无效。我认为这与外部函数引用
var I
var o
的方式有关。实际上,相同的事件处理程序会附加到所有依赖字段。我怎样才能解决这个问题

编辑:下面是一个带有错误的JSFIDLE:
请注意,改变父母中的任何一方只会影响第二个孩子。

我明白了。使用
jQuery.each
可以避免在循环中定义变量。 以下是我的解决方案:

function attachEventHandlers() {
    // begin dependent fields
    $.each(dependentFields, function (i, o) {
        $('#' + o.parent).change(function () {
            var visible = $(':selected', this).text() === o.choiceTrigger;
            for (var c = 0; c < o.children.length; c++) {
                var child = o.children[c];
                showField(child, visible);
                if (o.markAsReq && $('#' + child).val() === '') {
                    MarkFieldAsRequired(child);
                }
            }
        });
    });
}
函数attachEventHandlers(){
//开始相关字段
$。每个(依赖字段,函数(i,o){
$('#'+o.parent).更改(函数(){
var visible=$(':selected',this).text()==o.choiceTrigger;
for(var c=0;c
看看这里的解决方案:


您的原始代码在循环中创建的每个回调函数中引用一个变量
o
,并且该变量的值在每次迭代中都会重新分配,因此所有回调都使用最后分配的值。

您能设置一个值吗?看这个,看起来你的绑定是正确的。我没有把这个标记为正确答案,因为你没有回答这个问题。我知道问题出在哪里。但我投票支持相关链接。