0

私はJavaスクリプトに不慣れで、問題があります。

私はJson文字列から動的にフォームを作成しています(関連性はありません)-これらのすべてのコントロール情報を配列(コード内のallParamArray)に保持します。コントロールは親を持つことができるので、親コントロールは依存関係(子)を持つことができます-依存関係を持つ各コントロールにonchangeイベントをアタッチしたいと思います。依存関係はコンマで区切られ、refreshDependents関数で処理されます。

<code>

for (mp = 0; mp < allParamsArray.length; mp++) { 
    if (allParamsArray[mp].dependents) {
        var parent = allParamsArray[mp].name;
        var dependents = allParamsArray[mp].dependents;
        document.getElementById(parent).onchange = function() {
           refreshDependents(parent, dependents, this.selectedIndex)
        };
    }
}
</code>

問題は、コントロールのフォームの値を変更すると、refreshDependentsに最後の親情報があり、変更したコントロールの情報がないことです。

同じonchange関数を指す複数のコントロールを実現し、onchange function変更されているコントロールに関する正しい情報を取得する方法はあるのでしょうか。

4

1 に答える 1

0

これはそれを行う必要があります:

function makeHandler(parent, dependents, selectedIndex){
    return function(){
        refreshDependents(parent, dependents, selectedIndex);
    };
}

for (mp = 0; mp < allParamsArray.length; mp++) {
    if (allParamsArray[mp].dependents) {
        var parent = allParamsArray[mp].name;
        var dependents = allParamsArray[mp].dependents;
        document.getElementById(parent).onchange = makeHandler(parent, dependents, this.selectedIndex);
    }
}

この関数は、作成時に、、、および変数が持っていた値makeHandlerを保持する新しい関数オブジェクトを返します。parentdependentsselectedIndex

于 2012-07-11T12:46:03.413 に答える