Javascript 返回索引的负数
Javascript returns negative number for index
当我在javascript中执行onclick函数时获取负值
function sun()
{
var d,i;
var t = document.getElementById("table");
var rows = t.getElementsByTagName("tr");
for (i = 0; i < rows.length; i++) {
console.log("inside............." + i);
rows[i].onclick = function() {
d = (this.rowIndex);
console.log(d);
};
}
}
虽然我不确定是什么导致了你注意到的确切问题,但你在这里遇到了一个非常常见的JavaScript陷阱,在循环中使用闭包(匿名函数)。JavaScript 与许多其他支持函数式编程的语言一样,具有一个方便的属性,即函数可以在创建时围绕它们可见的任何变量"关闭范围"。因此,正如您在那里所做的那样,您可以在函数中使用 d
(或i
)的值,只要它在声明函数时可以看到它们。
中发生了一些有趣的事情:您在循环中创建的每个函数共享相同的范围,这意味着它们都共享完全相同的d
和i
副本。因此,当您单击任何行时,d
和 i
的值将是它们在循环结束时的值,而不是您要定位的特定迭代。
这通常使用称为"生成器模式"的东西来修复,您可以在其中创建一个单独的函数,该函数返回在所需范围内关闭的新函数。例如,在代码中,您可以执行类似操作
function generateClickHandler(i, d) {
return function() {
d = (this.rowIndex);
console.log(d);
};
}
function sun()
{
var d,i;
var t = document.getElementById("table");
var rows = t.getElementsByTagName("tr");
for (i = 0; i < rows.length; i++) {
console.log("inside............." + i);
rows[i].onclick = generateClickHandler(i, d);
}
}
新函数generateClickHandler
返回函数本身,但这里要注意的重要一点是,返回的函数关闭了本地参数i
和d
,而不是循环中使用的共享i
和d
值 - 当您调用generateClickHandler
时,它们的值会被复制。这样,您的代码就不会受到奇怪的闭包效果的影响。
相关文章:
- 在从索引位置返回的字符串中查找空白
- 使用共享工具提示时,单击Highcharts柱形图会返回不正确的序列索引
- 如何比较两个数组,然后返回差异的索引
- 在 jquery 选项卡中查找 span 标记并返回该索引
- 如何获取从循环返回的元素的索引
- 需要呈现MongoDB查询返回结果的特定索引/位置
- 通过getElementById查找所选索引是't返回正确的值
- 按流星空格键模板中的索引返回数组项
- 辅助功能键盘专用选项卡到z索引“;返回顶部”;
- JavaScript:通过其他数组元素的索引访问ArrayElement?array[array[0]返回undefin
- 如果我对索引进行硬编码,它会按预期工作,为什么这个增量器会返回NAN
- 为什么不't此循环返回到第一个索引
- .children()不适用于jquery返回的指定索引
- 角度:通过数组查找其索引返回对象的内容
- 如何使用此图像轮播的索引返回实际图像
- 为什么警报在 JS 中不起作用,索引返回 -1
- 获取空格索引返回错误的值
- JavaScript正则表达式匹配将输入作为前两个索引返回
- 为什么二维数组的索引返回-1
- 按索引返回数组值,如果给定else,则返回数组