Javascript java脚本中用于多个控件的单个onchange函数

Javascript java脚本中用于多个控件的单个onchange函数,javascript,onchange,Javascript,Onchange,我不熟悉java脚本,有一个问题 我正在从Json字符串动态创建一个表单,我们从中获得了一些信息(不相关)——将所有这些控件信息保存在数组中(代码中的allParamArray)。控件可以有父控件,因此父控件可以有依赖项(子控件)——我想将onchange事件附加到每个具有依赖项的控件。依赖项以逗号分隔,并在refreshDependents函数中处理 <code> for (mp = 0; mp < allParamsArray.length; mp++) { i

我不熟悉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>

对于(mp=0;mp
问题是,当我更改控件的窗体上的值时,refreshDependents具有最后一个父级信息,而不是我更改的控件的父级信息

我想知道是否有任何方法可以实现指向同一onchange函数的多个控件,并在
onchange函数中获得有关正在更改的控件的正确信息?

这应该可以做到:

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(父项、从属项、selectedIndex){
返回函数(){
刷新从属项(父项、从属项、selectedIndex);
};
}
对于(mp=0;mp

makeHandler
函数返回一个新的函数对象,该对象将保留
父变量
从属变量
selectedIndex
变量在创建时拥有的值

非常感谢,codebox\u rob。只需一条注释,this.selectedIndex在传递给makeHandle时不可用,但我想我们可以在ReferesDependents中检索它-为您提供解决方案向您致敬。再次感谢。