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