Javascript 将参数按值传递给onClick函数

Javascript 将参数按值传递给onClick函数,javascript,for-loop,onclick,pass-by-value,Javascript,For Loop,Onclick,Pass By Value,我不知道如何在JavaScript中将参数按值传递给onClick函数。我一直在尝试闭包函数,但它似乎不起作用!!啊 ... for(var i=0; i<=15; i++){ blockNr++; meal = getMealByCategory(category, i); place.innerHTML += "<div class='container-fluid' name='blockName' id='blockName" + block

我不知道如何在JavaScript中将参数按值传递给onClick函数。我一直在尝试闭包函数,但它似乎不起作用!!啊

...

for(var i=0; i<=15; i++){
    blockNr++;
    meal = getMealByCategory(category, i);
    place.innerHTML += "<div class='container-fluid' name='blockName' id='blockName" +
    blockNr + "' onClick='addPrice(meal, 20)'></div>"; //here, always the last meal is sent

    var itemPlace = document.getElementById("blockName"+blockNr);
    itemPlace.innerHTML = meal; //this works fine for all meals
}
。。。

对于(var i=0;i,这是因为在运行on click事件时,循环已完全执行,
mean
的值作为最后计算的值是静态的。如果需要更改每个元素的值,则应将参数值传递给函数,而不是传递变量名。例如:

"' onClick='addPrice('" + meal + "', 20)'></div>";
“'onClick='addPrice('“+fine+”,20)>”;

这是因为当您运行点击事件时,循环已完全执行,
MEIN
的值作为上次计算的值是静态的。如果需要更改每个元素的值,则应将参数值传递给函数,而不是传递变量名。例如:

"' onClick='addPrice('" + meal + "', 20)'></div>";
“'onClick='addPrice('“+fine+”,20)>”;

您要做的是创建一个全局变量,并在每次添加到
.innerHTML
时覆盖它。字符串中的代码不能引用局部变量,因此无法实现您想要的

一个选项是将值连接到字符串中

place.innerHTML += "<div class='container-fluid' name='blockName' id='blockName" +
blockNr + "' onClick='addPrice(\"" + meal + "\", 20)'></div>";

您要做的是创建一个全局变量,并在每次添加到
.innerHTML
时将其覆盖。字符串中的代码不能引用局部变量,因此无法实现所需的操作

一个选项是将值连接到字符串中

place.innerHTML += "<div class='container-fluid' name='blockName' id='blockName" +
blockNr + "' onClick='addPrice(\"" + meal + "\", 20)'></div>";


那么如何调用
onclick
函数呢?使用dom操作而不是html注入。
document.createElement(“div”)
…您的onclick绑定到循环末尾的fine变量,而不是每个迭代的fine值,这就是为什么总是显示最后一个fine。有很多示例说明如何在循环中分配事件处理程序来处理此问题。您是否考虑过使用jQuery?您可以稍微整理一下,然后添加一个click事件:$(“#blockName”)。在(“click”,addPrice(餐,20));那么如何调用
onclick
函数?使用dom操作而不是html注入。
document.createElement(“div”)
…您的onclick绑定到循环末尾的fine变量,而不是每个迭代的fine值,这就是为什么总是显示最后一个fine。有很多示例说明如何在循环中分配事件处理程序来处理此问题。您是否考虑过使用jQuery?您可以稍微整理一下,然后添加一个click事件:$()#“点击”,添加价格(餐,20));不确定什么是
,但这可能会导致XSSproblems@Bergi:可能吗?这太夸张了。但无论如何,我都表示会首选DOM创建。不确定什么是
fine
,但这可能会导致XSSproblems@Bergi:可能吗?这太夸张了。但不管怎样,我表示DOM创建会首选。不确定什么是
,但这可能会导致XSSproblems@Bergi
MEIN
是在此之前几行声明的变量。是的,但它的值是什么?似乎是一些HTML。@Bergi谁知道呢。随便
getMealByCategory()
返回。我不知道你怎么会认为这是HTML,因为没有证据证明这一点。我认为
itemPlace.innerHTML=fine;//这适用于所有的膳食
足以证明:-)但是,是的,每当我们不知道它是什么的时候,我们就需要正确地逃避它。不确定什么是
,但这可能会导致XSSproblems@Bergi
MEIN
是在此之前几行声明的变量。是的,但它的值是什么?似乎是一些HTML。@Bergi谁知道呢。随便
getMealByCategory()
返回。我不知道你怎么会认为这是HTML,因为没有证据证明这一点。我认为
itemPlace.innerHTML=fine;//这适用于所有的膳食
将是足够的证据:-)但是,是的,只要我们不知道它是什么,我们就需要正确地逃避它。