Javascript 如何在for循环中附加onchange处理程序
我有一个for循环,它迭代表单中的依赖字段。该数组如下所示: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
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
,并且该变量的值在每次迭代中都会重新分配,因此所有回调都使用最后分配的值。您能设置一个值吗?看这个,看起来你的绑定是正确的。我没有把这个标记为正确答案,因为你没有回答这个问题。我知道问题出在哪里。但我投票支持相关链接。