我正在尝试根据复选框输入创建表中所选行的值的数组列表。我认为我的问题是pop命令,但我不确定。用户基本上可以选择行x,y,z,并查看存储在数组中的行,然后取消选择z以仅查看x和y。
<script type="text/javascript">
var values = new Array();
function setrow(row)
{
values = [];
for (var i = 1; i < 5; i++) {
if (values[i] = row) {
values.pop(i);
} else {
values.push(row);
}
}
}
function display() {
for (var i = 0; i < values.length; i++) {
console.log(values[i]);
}
}
</script>
<table cellspacing=0 cellpadding=0 border=1>
<tr id="r1">
<td><input type="checkbox" name="rctrl" onclick="return setrow('r1')"></td>
<td>text</td>
</tr>
<tr id="r2">
<td><input type="checkbox" name="rctrl" onclick="return setrow('r2')"></td>
<td>text</td>
</tr>
<tr id="r3">
<td><input type="checkbox" name="rctrl" onclick="return setrow('r3')"></td>
<td>text</td>
</tr>
<tr id="r4">
<td><input type="checkbox" name="rctrl" onclick="return setrow('r4')"></td>
<td>text</td>
</tr>
</table>
<button type="button" onClick="display()">Click</button>
答案 0 :(得分:0)
使用r *作为键,将每个复选框的值存储在对象中要简单得多:
var values = {};
function setrow(checkbox, row)
{
values[row] = checkbox.checked;
}
function display() {
console.log(values);
}
答案 1 :(得分:0)
你有几个问题。
values
数组设置为空数组
致电setrow()
pop()
方法会自动删除数组中的最后一项。它不会像您使用它那样使用参数。您需要使用splice方法:splice(i, 1)
if
语句应使用==
或===
(作为比较),而不是=
(setter)答案 2 :(得分:0)
一些意见:
var values = new Array();
大多数人使用数组文字,因为它的类型较少,构造函数可能会令人困惑,所以:
var values = [];
function setrow(row)
{
values = [];
糟糕,您刚刚为值分配了一个新的数组实例。
for (var i = 1; i < 5; i++) {
if (values[i] = row) {
values.pop(i);
pop
不接受任何参数,它只是删除并返回数组的最后一个成员。
大概你想要一个已检查行的数组,所以为什么不在表上放置一个点击监听器并在点击时更新数组,例如
<table onclick="updateArray(this);" ...>
然后功能:
var values;
function updateArray(table) {
var arr = [];
var rctrls = document.getElementsByName('rctrl');
var el, row;
for (var i=0, iLen=rctrls.length; i<iLen; i++) {
el = rctrls[i];
if (el.checked) {
arr.push(el.parentNode.parentNode);
}
}
}
你可能会变得更复杂一些,我们是一个从输入到第一行元素的函数,例如。
function upTo(el, tagName) {
tagName = tagName.toLowerCase();
var el;
do {
el = el.parentNode;
if (el.tagName.toLowerCase() == tagName) {
return el;
}
} while (el.parentNode)
}
然后做:
if (el.checked) {
row = upTo(el, 'tr');
if (row) {
arr.push(row);
}
}