【发布时间】:2011-06-16 22:40:39
【问题描述】:
我正在使用 jQuery 遍历 HTML 表格,并动态填写每一行的行号(通过在文本框中填充行号):
function updateRowNums() {
$('#myTable').find('tr').each(function(index) {
$(this).find('input[id$="_rowOrder"]').val(index);
});
}
这个函数在下面被调用:
$(document).ready(function() {
// .. code truncated ... //
updateRowNums();
});
这在 Firefox 下运行良好。然而,在 Chrome(尝试了 5.x 和 9.x(测试版))和有时 Safari 下,这最终会填充一堆甚至不匹配的其他字段:
'input[id$="_rowOrder"]'
标准,带有行号。所以基本上它将数字分散在其他不相关的文本字段中......
我很确定这是某种 Chrome 或 jQuery 错误,但我只是在检查,因为它似乎是非常基本的功能。顺便说一句,如果我在代码中引入警报,那么它在 Chrome 上可以正常工作,所以这可能与 Chrome 中文档加载的时间有关:
function updateRowNums() {
$('#myTable').find('tr').each(function(index) {
alert("XXXXXXXXXXXXXXXXXXX");
$(this).find('input[id$="_rowOrder"]').val(index);
});
}
去这里看例子:
在本例中,您需要重现的步骤是:
- 使用 Chrome(或 Safari——有时也会失败)访问 URL。
- 您会注意到到目前为止,一切都按预期工作(即数字填充在第一列)
- 单击“导航离开”链接。
- 点击返回
- 您将看到在顶行和第一列下方填充的数字
您会注意到我添加了控制台日志记录,以输出正在修改其值的元素的 ID。该日志的输出是:
one_rowOrder
two_rowOrder
three_rowOrder
这表示只触及了 3 个元素。但是,从结果中,您可以看到 5 个元素中都有数字。
谢谢, 盖伦
【问题讨论】:
-
这将解决您的问题:无需使用 ID,只需在这些输入上定义一个类。然后
$(this).find('.rowOrder') -
这些 ID 属性是否以数字开头?
-
您的代码有效:jsfiddle.net/eGutT/1
标签: javascript jquery firefox google-chrome safari