Ian*_*gan 8 html javascript events prototypejs
只是一个简单的问题,任何人都可以告诉我为什么这不起作用以及如何解决它?本质上,它采用HTML中的一组表行并动态地将点击事件附加到它们.
for (var a=index; a<rows.length; a++) {
tr = rows[a];
tr.onclick = function() { DropDownManager.onItemClick(tr, a); };
tr.observe("click", function() { DropDownManager.onItemClick(tr, a); });
}
Run Code Online (Sandbox Code Playgroud)
这段代码的问题是传递给DropDownManager.onItemClick的值总是循环中的最后一项,这不是我想要的那样,因为我希望它们是循环那个阶段的当前值.我意识到我错过了一些非常简单但却无法解决我生活的问题!
Fel*_*ing 14
JavaScript没有块范围,因此例如循环不会创建新范围.您可以使用以下函数创建一个:
for (var a=index; a<rows.length; a++) {
(function(a) {
tr = rows[a];
tr.onclick = function() { DropDownManager.onItemClick(this, a); };
tr.observe("click", function() { DropDownManager.onItemClick(this, a); });
}(a));
}
Run Code Online (Sandbox Code Playgroud)
根据什么rows和tr是,你甚至不需要循环索引.也许你可以通过另一种方式获取事件处理程序中的元素索引.例如,如果tr是HTMLTableRowElement [MDN],那么您可以通过其他行获取其位置this.rowIndex.
顺便说一句.为什么要绑定相同的事件处理程序两次?
| 归档时间: |
|
| 查看次数: |
3650 次 |
| 最近记录: |