Javascript 单击将行号发送到另一个函数

Javascript 单击将行号发送到另一个函数,javascript,Javascript,我有一个表格,每一行都需要一个点击功能 我想将行号和文本发送到另一个函数 当我点击一行时,它会给出正确的文本,但对于每一行,它会给出总行数。如何给出当前单击行的编号 var table = document.getElementById("orders"); if (table != null) { for (var i = 0; i < table.rows.length; i++) { for (var j = 0; j < table.rows[i].c

我有一个表格,每一行都需要一个点击功能

我想将行号和文本发送到另一个函数

当我点击一行时,它会给出正确的文本,但对于每一行,它会给出总行数。如何给出当前单击行的编号

var table = document.getElementById("orders");
if (table != null) {
    for (var i = 0; i < table.rows.length; i++) {
        for (var j = 0; j < table.rows[i].cells.length; j++)
        table.rows[i].cells[j].onclick = function () {
            tableText(this, i);
        };
    }
}

function tableText(tableCell, i) {
    alert(tableCell.innerHTML + i);
}
var table=document.getElementById(“订单”);
如果(表!=null){
对于(var i=0;i
您在JavaScript
var
范围界定方面遇到了一个常见问题。问题是变量的作用域是
for
循环本身,而不是块。这意味着变量会随着的
的每一次进一步迭代而不断变化

使用ES6
let
,您可以轻松解决此问题:

const table = document.getElementById("orders");
if (table != null) {
    for (let i = 0; i < table.rows.length; i++) {
        for (let j = 0; j < table.rows[i].cells.length; j++)
        table.rows[i].cells[j].onclick = function () {
            tableText(this, i);
        };
    }
}
const table=document.getElementById(“订单”);
如果(表!=null){
for(设i=0;i
(为了获得最佳实践,我更改了其他变量,但这并不是必须的。)

如果您不能使用ES6,您可以使用如下自动执行功能:

for (var i = 0; i < table.rows.length; i++) {
    for (var j = 0; j < table.rows[i].cells.length; j++) {
        table.rows[i].cells[j].onclick = (function (i) {
           return function () {
              tableText(this, i);
           };
        })(i);
    }
}
for(变量i=0;i
不过没那么好


另请参见:

在不深入讨论的情况下,我怀疑
警报
调用同时评估
innerHTML
I
,因此您在
警报
上得到的号码不正确

我也会改变:

tableText(this, i);
明说

tableText(table.rows[i].cells[j], i);
只是为了避免任何可能的混乱
这可能是对javascript/html文件本身的评估