當我點擊一個按鈕,我想
- 在一張桌子
- 拷貝的末尾插入新行從表中的第一行的單元和內容
- 給唯一ID到細胞內的元素
- 分配一個焦點事件偵聽到頁面中的所有輸入。
問題:
事件處理程序不開火在IE8正確的元素。例如,如果我專注於表格中的最後一個輸入,則第一個輸入會突出顯示。
澄清:
- 這工作在IE10,Chrome瀏覽器。
- 在我的目標瀏覽器IE8中不起作用。
- 我知道 的方式來解決這個問題。我的目標不是找到一個解決方法,但要知道我的錯誤是什麼,在給定的代碼。
- 示例代碼只是該問題的簡化版本。我並不是要求與問題無關的代碼優化。
- 更改事件不起作用。
CODE:
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() {....};
附加的事件處理程序,因爲他們被渲染。
FIDDLE:
http://jsfiddle.net/sajjansarkar/GJvvu/
相關鏈接IN SO:
jQuery event listener doesn't work in IE 7/8
如果從字面上'$ this.focus改變(''到$ this.onfocus ='解決問題,問題就在那裏,但我懷疑這只是一個錯字你的問題。 –
jQuery的哪個版本? – SLaks
@KevinB好吧,我想知道是什麼問題?爲什麼它不能以第一種方式工作? –