Javascript 使用changin变量在更改函数时设置多个滑块

Javascript 使用changin变量在更改函数时设置多个滑块,javascript,html,Javascript,Html,我有一个参数不断变化的循环,我想在这个循环中创建的滑块的oninput函数中使用它,但我无法让它工作。以下是我的脚本的简化版本: for (var con in dict) { var div = document.getElementById("content"); var conDiv = document.createElement("div"); conDiv.innerHTML = "<b>" + con + ":</b><br&g

我有一个参数不断变化的循环,我想在这个循环中创建的滑块的oninput函数中使用它,但我无法让它工作。以下是我的脚本的简化版本:

for (var con in dict) {
    var div = document.getElementById("content");
    var conDiv = document.createElement("div");
    conDiv.innerHTML = "<b>" + con + ":</b><br>";
    var effectID = dict[con].effect_id;
    for (var param in dict[con].params) {
        var inp,span = document.createElement("span");
        span.innerHTML = " " + param + " ";
        conDiv.appendChild(span);
        inp = document.createElement("input");
        inp.type = "range";
        inp.min = vars[effectID][param].min;
        inp.max = vars[effectID][param].max;
        inp.value = dict[con].params[param];        
        inp.oninput = function(con,param,val) {
            setParam(con,param,val);
              }(con,param,this.value);      
        conDiv.appendChild(inp);
    }
    div.appendChild(conDiv);
}
for(dict中的var con){
var div=document.getElementById(“内容”);
var conDiv=document.createElement(“div”);
conDiv.innerHTML=“+con+”:
”; var effectID=dict[con]。效果id; for(dict[con].params中的变量参数){ var inp,span=document.createElement(“span”); span.innerHTML=“”+参数+”; 第四条附属物(span); inp=document.createElement(“输入”); inp.type=“范围”; inp.min=vars[effectID][param].min; inp.max=vars[effectID][param].max; inp.value=dict[con].params[param]; inp.oninput=函数(con、param、val){ setParam(con、param、val); }(con,param,该值); 第四条附属物儿童(inp); } 儿童分部(康迪夫); }
我的代码怎么了


编辑:我的目标:我有一套我想要改变的音频效果。每个容器(con)通过多个参数控制效果节点。所有这些参数都有不同的最小值和最大值以及它们现在的实际值。通过滑块,我希望能够调用一个函数来更改容器的参数。因此,每个滑块都应该控制一个效果参数。

这是因为在循环完成后调用回调,所以变量已更改

通常的技巧是使用一个立即调用的函数,该函数的作用域可以存储变量值:

for (var con in dict) {
    (function(con) { // <= creates a scope and a new con variable
        var div = document.getElementById("content");
        var conDiv = document.createElement("div");
        conDiv.innerHTML = "<b>" + con + ":</b><br>";
        var effectID = dict[con].effect_id;
        for (var param in dict[con].params) {
            (function(param){
                var inp,span = document.createElement("span");
                span.innerHTML = " " + param + " ";
                conDiv.appendChild(span);
                inp = document.createElement("input");
                inp.type = "range";
                inp.min = vars[effectID][param].min;
                inp.max = vars[effectID][param].max;
                inp.value = dict[con].params[param];        
                inp.oninput = function() {
                    setParam(con,param,inp.value);
                 };      
                conDiv.appendChild(inp);
            })(param);
        }
        div.appendChild(conDiv);
    })(con);
}
for(dict中的var con){

(功能(con){//谢谢,但是为什么这个.value没有定义?我的意思是在oninput函数前面的一行我显式地将它设置为一个值,但是如果我执行这个,它就没有定义。我创建了一个提琴来说明我的意思:还有,为什么它要在构造时执行?没有用户输入来处理,所以为什么要调用它?我想你需要inp.value In停止this.value。但是如果您不想立即调用它,请删除
(con,param,inp.value)
部分。好的,现在滑块确实调用setParam(),但是con和param参数是错误的:我不确定您的目标,所以我可能是错误的,但您可能想要我刚才编辑的内容?