1

我正在尝试根据复选框输入在表中创建所选行的值的数组列表。我认为我的问题是 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>

4

3 回答 3

0

It'll be much simpler to store the value of each checkbox in an object, using r* as the keys:

var values = {};

function setrow(checkbox, row)
{ 
    values[row] = checkbox.checked;
} 


function display() {
    console.log(values);  
}​

Example: http://jsfiddle.net/4TjhZ/

于 2012-10-19T01:19:52.793 回答
0

你有几个问题。

  1. values每次调用时,您都将数组设置为空数组setrow()
  2. 因为您从 1 开始循环,所以您永远不会遍历您的第一个数组项。
  3. pop()方法自动删除数组中的最后一项。它不像您使用它那样需要参数。您需要使用拼接方法:splice(i, 1)
  4. 您的if语句应该使用==or ===(作为比较)而不是=(setter)
于 2012-10-19T01:38:39.740 回答
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);
      }
    }
于 2012-10-19T01:56:06.867 回答