检查HTML表以选择数据行

时间:2012-10-19 01:11:21

标签: javascript html arrays

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

3 个答案:

答案 0 :(得分:0)

使用r *作为键,将每个复选框的值存储在对象中要简单得多:

var values = {};

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


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

示例:http://jsfiddle.net/4TjhZ/

答案 1 :(得分:0)

你有几个问题。

  1. 您每次都将values数组设置为空数组 致电setrow()
  2. 因为你的循环开始于1,所以你永远不会遍历你的第一个数组项。
  3. pop()方法会自动删除数组中的最后一项。它不会像您使用它那样使用参数。您需要使用splice方法:splice(i, 1)
  4. 您的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);
      }
    }