如何通过数组值递归检查复选框?

时间:2012-11-20 22:38:08

标签: javascript html arrays checkbox

我将尽力简洁:)我正在研究一个项目。该项目生成许多页面,其中包含缩略图图像,旁边有复选框。总缩略图可以有不同的数量。缩略图分为1000个项目html页面。所以1000缩略图一个HTML页面。这些充满缩略图的页面由父html页面通过iframe调用。我的目标是让用户能够检查这些缩略图附近的复选框,然后将新页面加载到iframe,复选框,然后能够将上一页加载到iframe中,并且javascript检查框中的用户之前已经检查过。我通过使用数组跟踪用户选中的复选框。

这是javascript。有两个问题!第一个问题是,我有警报进行调试。它会提醒正确的值,但它会警告存储在数组中的所有值。我希望它只提醒iframe页面中存在的复选框,这就是我将它放到document.getElementByNames的原因。然后......它没有检查任何方框!没有盒子检查:(

有关如何实现这一目标的任何想法? JS和HTML低于......

JS

function repGenChk(valNam) {
  var chkN = valNam.name;
  parent.genL.push(chkN);
  alert(parent.genL);
}
function chkSet() {
  for (var i = 0; i < parent.genL.length; i++) {
  var item = parent.genL[i];
  var item = document.getElementsByName(item);
  if (item != null) { document.getElementsByName(item).checked=true; }
  alert(parent.genL[i]);
}}

window.onload = chkSet();

HTML

<input type="checkbox" onClick="repGenChk(this);" value="1" name="1">
<input type="checkbox" onClick="repGenChk(this);" value="2" name="2">
<input type="checkbox" onClick="repGenChk(this);" value="3" name="3">
<input type="checkbox" onClick="repGenChk(this);" value="4" name="4">
so on and so forth for Xthousands of checkboxes....

任何想法,想法,建设性的批评和批评都非常受欢迎!我过去收到了很多jQuery建议,我开始考虑它了。

非常感谢大家!

编辑 - 我能够弄清楚。我不认为我可以使用带复选框的ID。宇!

JS

function repGenChk(valNam) {
var chkN = valNam.id;
parent.genL.push(chkN);
alert(parent.genL);
}
window.onload = function chkSet() {
for (var i = 0; i < parent.genL.length; i++) {
if (document.getElementById(parent.genL[i]) != null) {     document.getElementById(parent.genL[i]).checked=true; }
}
}

HTML

<input type="checkbox" onClick="repGenChk(this);" id="1">
<input type="checkbox" onClick="repGenChk(this);" id="2">
<input type="checkbox" onClick="repGenChk(this);" id="3">
<input type="checkbox" onClick="repGenChk(this);" id="4">
etc etc etc.....

:)

1 个答案:

答案 0 :(得分:1)

考虑在包含复选框的元素上放置单击侦听器。为每个复选框指定唯一的ID或名称。当您点击容器时,请检查它的来源。如果它来自一个复选框,则根据是否选中复选框,在复选框中添加或删除复选框的名称/ ID,以存储哪些复选框。

如果要重新检查它们,请迭代对象(使用for..in)并使用getElementByIdgetElementsByName(…)[0]选中复选框。这样,您只会迭代尽可能多的对象属性,因为检查了复选框,getElementById非常快,所以事情应该更简单,更快。

BTW,getElementsByName返回一个collection,它类似于数组,但它不是数组。