フォーム内の依存フィールドを反復処理する 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);
}
}
});
}
}
2 番目の従属フィールドのみが機能し、最初のフィールドは機能しません。var i
これは方法に関係があるかvar o
、外部関数から参照されていると思います。事実上、同じイベント ハンドラーがすべての依存フィールドに関連付けられます。どうすればこれを修正できますか?
編集: ここにバグのある jsfiddle があります: http://jsfiddle.net/H3Bv2/4/ 親のいずれかを変更すると、2 番目の子にのみ影響することに注意してください。