0

我是 java 脚本的新手并且遇到了问题。

我正在从 Json 字符串动态创建一个表单,我们获得了一些方法(不相关) - 将所有这些控件信息保存在 Array 中(代码中的 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 回答