关于js定位到checkbox没有值显示undefined问题,求教各位大神

时间:2022-03-13 09:48:53
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>
    <script type="text/javascript">
     function fy(){
     //定位到inputID所对应的元素
     var inputElement = document.getElementById("inputID");
     var currPageNO = inputElement.value;
     var url = "/day15/CrmServlet?method=findAllCustomer&currPageNO="+currPageNO;
     window.location.href = url;
     }
     function deleteAll(){
     //定位到tableID所对应的元素,即<table>标签
     var tableElement = document.getElementById("tableID");
     var size = tableElement.rows.length;//size=5
     //装ID号的数组
     var ids = "";
     for(var i=1;i<=size-2;i++){
     //取得每行的1列中的checkbox元素
     var checkboxElement = tableElement.rows(i).cells(0).firstChild;
    
     //如果该复选框被选中
     if(checkboxElement.checked){
     //收集该复选框的ID值
     ids += checkboxElement.value + "_";
     }
     }
    
     /* var url = "/day15/CrmServlet?method=deleteCustomerById&ids="+ids;
     window.location.href = url;*/
     } 
    </script>
   <table id="tableID" border="1" align="center" width="80%">
   <caption><h1>客户信息</h1></caption>
   <tr>
   <th>状态</th>
   <th>姓名</th>
   <th>性别</th>
   <th>地址</th>
   <th>电话</th>
   <th>邮箱</th>
   <th>生日</th>
   </tr>
   <c:forEach var="customer" items="${page.listCustomer}">
   <tr>
   <td>
   <input type="checkbox" value="${customer.id}"/>
   </td>
   <td>${customer.name}</td>
   <td>${customer.gender}</td>
   <td>${customer.address}</td>
   <td>${customer.tel}</td>
   <td>${customer.email}</td>
   <td>${customer.birthday}</td>
   <td>
   <a href="/day15/CrmServlet?method=findCustomerById&id=${customer.id}" style="text-decoration:none">[编辑]</a>
   </td>
   </tr>
   </c:forEach>
   <tr>
   <td colspan="7" align="center">
   <input type="button" value="删除" onclick="deleteAll()"/>
   <input id="inputID" type="text" size="1" name="currPageNO"/>
   <input type="button" value="GO" onclick="fy()"/>
   </td>
   </tr>
   </table>
  </body>
</html>

5 个解决方案

#1


取数组项目用[],不要用(),非ie浏览器报错。firstChild在标准浏览器下空白也算一个节点,改成下面的


        function deleteAll() {
            //定位到tableID所对应的元素,即<table>标签
            var tableElement = document.getElementById("tableID");
            var cbs = tableElement.getElementsByTagName('input');
            var ids = "";
            for (var i = 0; i <cbs.length; i++) {
                if (cbs[i].type=='checkbox'&&cbs[i].checked) {
                    ids += cbs[i].value + "_";
                }
            }
            alert(ids)
            /* var url = "/day15/CrmServlet?method=deleteCustomerById&ids="+ids;
            window.location.href = url;*/
        }

#2


嗯现在能取到值了,但是到了循环外又不能取值了,点击没反应,好像是没大执行到循环体外一样。

#3


现在可以了,但是我想问下,之前我用[ ]代替()也不行,还有就是你说的空格是是指一个td符号之间所有的空格符吗?对于js是很不懂

#4


引用 3 楼 qq_34652389 的回复:
现在可以了,但是我想问下,之前我用[ ]代替()也不行,还有就是你说的空格是是指一个td符号之间所有的空格符吗?对于js是很不懂

换行也是一个节点(空白的)
要去掉firstChild才是input元素,否则是那个换行节点
<td><input type="checkbox" value="${customer.id}"/>
   </td>

你之前代码应该是firstChild的问题,不是()导致的,除非你用的非ie浏览器

#5


引用 4 楼 showbo的回复:
Quote: 引用 3 楼 qq_34652389 的回复:

现在可以了,但是我想问下,之前我用[ ]代替()也不行,还有就是你说的空格是是指一个td符号之间所有的空格符吗?对于js是很不懂

换行也是一个节点(空白的)
要去掉firstChild才是input元素,否则是那个换行节点
<td><input type="checkbox" value="${customer.id}"/>
   </td>

你之前代码应该是firstChild的问题,不是()导致的,除非你用的非ie浏览器

对的,我把td两边的空格全去了之后,就可以了,感谢了,网上找了一天,竟然是这里有问题。

#1


取数组项目用[],不要用(),非ie浏览器报错。firstChild在标准浏览器下空白也算一个节点,改成下面的


        function deleteAll() {
            //定位到tableID所对应的元素,即<table>标签
            var tableElement = document.getElementById("tableID");
            var cbs = tableElement.getElementsByTagName('input');
            var ids = "";
            for (var i = 0; i <cbs.length; i++) {
                if (cbs[i].type=='checkbox'&&cbs[i].checked) {
                    ids += cbs[i].value + "_";
                }
            }
            alert(ids)
            /* var url = "/day15/CrmServlet?method=deleteCustomerById&ids="+ids;
            window.location.href = url;*/
        }

#2


嗯现在能取到值了,但是到了循环外又不能取值了,点击没反应,好像是没大执行到循环体外一样。

#3


现在可以了,但是我想问下,之前我用[ ]代替()也不行,还有就是你说的空格是是指一个td符号之间所有的空格符吗?对于js是很不懂

#4


引用 3 楼 qq_34652389 的回复:
现在可以了,但是我想问下,之前我用[ ]代替()也不行,还有就是你说的空格是是指一个td符号之间所有的空格符吗?对于js是很不懂

换行也是一个节点(空白的)
要去掉firstChild才是input元素,否则是那个换行节点
<td><input type="checkbox" value="${customer.id}"/>
   </td>

你之前代码应该是firstChild的问题,不是()导致的,除非你用的非ie浏览器

#5


引用 4 楼 showbo的回复:
Quote: 引用 3 楼 qq_34652389 的回复:

现在可以了,但是我想问下,之前我用[ ]代替()也不行,还有就是你说的空格是是指一个td符号之间所有的空格符吗?对于js是很不懂

换行也是一个节点(空白的)
要去掉firstChild才是input元素,否则是那个换行节点
<td><input type="checkbox" value="${customer.id}"/>
   </td>

你之前代码应该是firstChild的问题,不是()导致的,除非你用的非ie浏览器

对的,我把td两边的空格全去了之后,就可以了,感谢了,网上找了一天,竟然是这里有问题。