我有以下java脚本代码段
<script>
var editables = document.getElementsByClassName("canEdit");
function editHandler(el) {
return function() {
window.alert(el.textContent);
}
}
for (var i = 0; i < editables.length; i++) {
var el = editables[i];
el.onclick = editHandler(editables[i]);
}
</script>
如果我注释掉var el = editables[i];
行,那么当我点击可编辑元素时,警报就不会再弹出。为什么会这样?
答案 0 :(得分:2)
该行定义el
。没有它,就没有附加onclick
处理程序的元素。如果你没有在那里收到引用错误,那么必须有一些(可能是全局的,如果你的代码片段是准确的)变量名为el
,已经在代码中的其他地方定义了。
答案 1 :(得分:2)
为什么会这样?
因为您使用el
来绑定事件处理程序。如果您注释掉该行
var el = editables[i];
然后变量el
将不存在且
el.onclick = editHandler(editables[i]);
将引发引用错误,因为您尝试访问不存在的变量的.onclick
属性。 事件处理程序永远不会绑定。
您可以改为使用editables[i]
:
editables[i].onclick = editHandler(editables[i]);