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

Single onchange function for multiple controls in java script

本文关键字:单个 onchange 函数 控件 脚本 用于 java      更新时间:2023-09-26

我是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中,我们可以获得关于正在更改的控件的正确信息?

这应该做到:

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变量在创建时的值。