如何在函数中有一个动态变量,而不将其链接到变化的变量

How to have a dynamic variable in a function without linking it to a changing variable

本文关键字:变量 链接 变化 函数 动态 有一个      更新时间:2023-09-26

很抱歉有这个标题,但我不确定这个问题的正确术语是什么。我正在尝试使用JavaScript中的for循环动态生成一个可点击元素表。单击每个元素时,都应该触发相同的函数,但参数不同。在我的代码中,我正在设置onClick函数,如下所示:

elementArray[i].onClick = function() { clickFunction(i) };

然而,当我这样做时,clickFunction只是取i当前设置的值,而不是我设置onClick函数时的值,这正是我想要的。有什么想法吗?

当我收到你的问题时,你想要一个具有可点击元素的表,用diff参数调用相同的函数。[如果不是你的问题,请告诉我]

因此,取i(索引或行号)将是该函数的参数。

HTML:

<table id='myTable'></table>

Javascript:

for(i = 9; i >= 0; i--) {
var table = document.getElementById("myTable");
// Create an empty <tr> element and add it to the 1st position of the table:
var row = table.insertRow(0);
// Insert new cells (<td> elements) at the 1st and 2nd position of the "new" <tr> element:
var cell = row.insertCell(0);
// Add some text to the new cells:
cell.innerHTML = "<input type='button' onclick='callIt("+i+")'";
}
function callIt(index) {
alert(index);
}

我正在考虑你们想点击按钮。希望它能帮助你。

您可以在w3schools 上获得更多信息

这是@Bhojendra Nepal的"重复问题"的一个版本,适用于您的问题。使用此HTML:

<div class="element-0">0</div>
<div class="element-1">1</div>
<div class="element-2">2</div>

这个脚本:

var elementArray = [];
var creatFunc = function($this,i){
  return function() { 
    console.log(i);
    $this.html(i + 1);
    if (i>1) i++;
  };
};
for (var i = 0; i < 3; i++) {
  elementArray[i] = $('.element-' + i);
  elementArray[i].click( creatFunc( elementArray[i] , i) );
}

通过在一个单独的函数中创建函数,我们隔离了变量。我添加了"if(I>1)I++;"来显示新函数如何保留自己的变量并可以递增(不断点击第三个div可以看到数字不断增加)。

这是一个jsfiddle:

https://jsfiddle.net/mckinleymedia/1cksb8ky/

我希望这能有所帮助。

哦,我添加了jQuery。我不确定如何在普通javascript中实现这一点。