概述:
当我单击一个按钮时,我想
- 在表格末尾插入新行
- 复制表格第一行的单元格和内容
- 为单元格内的元素提供唯一的 ID
- 为页面中的所有输入分配一个焦点事件侦听器。
问题:
事件处理程序未在 IE8 中的正确元素上触发。例如,如果我关注表格中的最后一个输入,则第一个输入会突出显示。
澄清:
- 这适用于 IE10、Chrome。
- 在我的目标浏览器 IE8 中不起作用。
- 我知道解决这个问题的方法。我的目标不是找到解决方法,而是在给定的代码中了解我的错误是什么。
- 示例代码只是问题的快速简化版本。我不是要求与问题无关的代码优化。
- 更改事件也不起作用。
代码:
HTML:
<table width="200" border="1" id="myTable">
<tr>
<td>
<input type='text' id='row0col0' name='row0col0'>
</td>
</tr>
</table>
<button id="addRow">Add Row</button>
JS:
function addFocusListener() {
$("input").unbind();
$("input").each(function () {
var $this = $(this);
$this.focus(function () {
var newThis = $(this);
newThis.css('background-color', 'red');
});
});
}
function addRowWithIncrementedIDs() {
var table = document.getElementById("myTable");
var newRow = table.insertRow(-1);
var row = table.rows[0];
var rowNum = newRow.rowIndex;
for (var d = 0; d < row.cells.length; d++) {
var oldCell = row.cells[d];
newCell = oldCell.cloneNode(true);
newRow.appendChild(newCell);
for (var c = 0; c < newCell.childNodes.length; c++) {
var currElement = newCell.childNodes[c];
var id = "row" + rowNum + "col" + d;
$(currElement).attr('name', id);
$(currElement).attr('id', id);
}
}
}
$(document).ready(function () {
$("#addRow").click(function () {
addRowWithIncrementedIDs();
addFocusListener();
});
});
其他可行的方法:
从 jQuery 绑定更改为常规 JS 绑定。即从
$this.focus(function () {....});
至
this.onfocus =function () {....};
在呈现事件处理程序时附加它们。
小提琴:
http://jsfiddle.net/sajjansarkar/GJvvu/
SO中的相关链接: