Onclick doesn't work as expected on tr
Onclick doesn't work as expected on tr
我正在尝试使onclick
事件适用于表的所有行。但是,我单击哪一行并不重要,事件似乎只为最后一个tr
触发。我在JSFiddle上做了一个简单的例子来说明这个问题。
HTML:
<table>
<tr>
<td>Test</td>
<td>Test2</td>
</tr>
<tr>
<td>Test</td>
<td>Test2</td>
</tr>
<tr>
<td>Test</td>
<td>Test2</td>
</tr>
<tr>
<td>Test</td>
<td>Test2</td>
</tr>
</table>
Javascript:
var table = document.getElementsByTagName( "table" )[0];
for( var contador = 0; contador < table.getElementsByTagName( "tr" ).length; contador++ ){
var line = table.getElementsByTagName( "tr" )[contador];
line.onclick = function() {
line.innerHTML = "Row clicked";
};
}
这是一个作用域问题,for
块不会创建新的作用域,所以最后一个值会覆盖以前的值,您可以使用自调用函数:
(function (line) {
line.onclick = function () {
//line.innerHTML = "Row clicked";
line.cells[0].textContent = "Row clicked";
};
})(table.getElementsByTagName("tr")[contador]);
http://jsfiddle.net/tx3s580a/
正如undefined的答案中所提到的,for block不会创建新的作用域。
每次运行循环时,line
都会发生更改。请改用this
。。。
var table = document.getElementsByTagName( "table" )[0];
for( var contador = 0; contador < table.getElementsByTagName( "tr" ).length; contador++ ){
var line = table.getElementsByTagName( "tr" )[contador];
line.onclick = function(){
this.innerHTML = "Row clicked...";
};
}
http://jsfiddle.net/a9xf0nz2/
其他人的回复比我快,但一旦你解决了你的问题,也要注意你的"innerHTML"可能无法正确使用IE(你的jsfiddle给出了"SCRIPT600:此操作的目标元素无效")!
JavaScript innerHTML不适用于IE?
相关文章:
- jQuery .load with variable as url
- React.findDOMNode comes as undefined
- $scope is coming as undefined
- AltGr treated as Alt + Ctrl
- new Date('2011-12-15 00:00:00') is showing up as NaN
- CSS styling of <UL> as table
- Array.prototype.fill() different from fill as I go
- (!n%2) is the same as (!n%2 == 0)?
- Angulrjs:控制器不会通过带有“as”语句的工厂发送值
- 尝试理解$.inArray,或将$scope转换为“$scope”;控制器As”;AngularJS中的语法
- Mosync Javascript NativeUI Editbox as Password field
- 使用“;AS“;alasql(AngularJS)中SQL语句中的子句
- JavaScript中的动态实例化[Classname as String]
- Underscore as a JavaScript variable?
- 在 ANGULARJS 中:s.Id as s.Name for s 在 Player 中显示 playerName i
- Aurelia oneTime binding as defaultBindingMode
- 限制此随机器中连续“As”和“B”的数量
- Angular2 $compile directive as AngularJS 1
- 如何在 DIv AS HTML 内容而不是文本中显示文本区域的 HTML 内容
- Onclick doesn't work as expected on tr