如何循环数组中的元素id并将其分配给变量
How can I loop over element ids in an array and assign them to variables?
我正在尝试重构window.onload函数,以避免冗余。我想使用它们的id,循环遍历我分配给全局变量的元素。最初,我可以用循环分配onclick函数,但现在我无法用小提琴复制它。但主要问题只是试图做到这一点(见fiddle):
var gragh, gorgh;
var ids = ["gragh", "gorgh"];
for (var i = 0; i < ids.length; i++) {
ids[i] = document.getElementById(ids[i]);
// TypeError: document.getElementById(ids[i]).onclick = doStuff;
}
//console.log(gragh); undefined
这应该将变量gragh和gorgh分配给具有相同id的p个元素。在循环中,ids[i]似乎指的是p元素。然而,在循环之后,这些变量是未定义的。当这些变量没有被引号包围时,在数组中循环也不起作用。我甚至尝试过使用eval(),结果喜忧参半。所以我的问题是,我该如何让它发挥作用?还有,为什么这不起作用?如果ids=[gragh,gorgh](没有引号),那么数组中的这些变量指的是什么?
不要在循环中重新分配它,请尝试使用新数组进行填充。把它想象成一个引用——你在循环的时候修改它。
var gragh, gorgh;
var ids = ["gragh", "gorgh"];
var newSet = [];
for (var i = 0; i < ids.length; i++) {
newSet[i] = document.getElementById(ids[i]);
}
循环将在这个onclick
执行之前很久完成循环。因此,此时i
的值将是循环的上限。
closure
的解决方案
var gragh;
var ids = ["gragh", "gorgh"];
for (var i=0; i<ids.length; i++) {
(function(i){ // creating closure
console.log(i)
document.getElementById(ids[i]).onclick = doStuff
})(i) // passing value of i
}
document.getElementById("gragh").innerHTML = "ids[0]: " + ids[0] + ", ids[1]: " + ids[1]
function doStuff() {
document.getElementById("gorgh").innerHTML = "ids[0]: " + ids[0] + ",ids[1]: " + ids[1] + ", var gragh: " + gragh;
}
gragh
是未定义的,因为您只声明了它,但从未初始化它
JSFIDDLE
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何为动态创建的元素分配唯一的id-Javascript
- jQuery插件在为元素分配id时停止工作
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - 分配后,您可以更改Facebook应用程序ID吗?
- 如何在html / JS中展开或关闭内容 - 始终分配给不同的id
- 为什么我们被教导将document.getElementById(“id”)分配给一个变量,然后将该变量与属性一起使用
- 动态生成 id,并分配给标签
- 使用 JQuery 从另一个元素的 id 为图像分配属性
- Coturn/turnserver:错误437:分配不匹配:事务ID(WebRTC)错误
- Javascript原型通用Enquries和通过数组索引分配Id
- 根据类ID分配Fancybox标题
- 无法将 ID 分配给有序列表
- 如何将 ID 分配给动态下拉列表选择
- 在循环访问集合时将动态 ID 分配给隐藏字段
- jquery根据输入值按名称查找元素,并将其id分配给另一个元素
- 为元素的ID分配一个动态字符串
- 将类id分配给输入字段
- 根据元素id分配工具提示
- 无法让 javascript 将 id 分配给隐藏字段