codeigniter中的javascript复选框foreach问题

时间:2011-06-01 08:35:18

标签: php javascript jquery codeigniter checkbox

嗨我试图将一个复选框合并到我的jquery表中..表数据将从数据库填充..在表下面是按钮删除,编辑和添加按钮..我有一个脚本,将检查是否一个复选框或者打勾或不打..所以当有人试图删除一行并且他没有选中任何复选框时,警报会告诉他他/她应该先选择要删除的行。我的脚本的问题是,如果表只有一行..即使我勾选复选框,它仍然会提示我应该选择要删除的行。现在这是我的代码:

的javascript

<script type="text/javascript">
function validateForm()
{
var checkboxes = document.forms["list"]["checkID"];
   for (var i = 0; i < checkboxes.length; i++) {
      if (checkboxes[i].checked) {
         return true;
      }
   }

   alert("Please select a user to edit / delete.");
   return false;
}
</script>

HTML

<table class="data display datatable" id="example">
    <thead>
        <tr>
          <th>Username</th>
          <th>Name</th>
          <th>Nickname</th>
          <th>Birthday</th>
          <th>Sex</th>
          <th>Address</th>
          <th><input type="checkbox" id="select all"></th>
        </tr>
    </thead>
    <tbody> 
<?php foreach($query->result_array() as $row): ?>
        <tr class="even gradeC">
            <td><?php echo anchor('users/details/'.$row['usrID'],$row['usrName']);?></td>
            <td><?php echo $row['usrpFirstName'].' '.$row['usrpLastName'];?></td>
            <td><?php echo $row['usrpNick'];?></td>
            <td><?php echo $row['usrpBday'];?></td>
            <td><?php echo $row['usrpSex'];?></td>
            <td><?php echo $row['usrpAddress'];?></td>
            <td><input type="checkbox" name="checkID[]" id="checkID" value="<?php echo $row['usrID'];?>" />

              <label for="checkID"></label></td>
        </tr>
<? endforeach; ?>
    </tbody>
</table>
  <input type="submit" name="Delete" id="Delete" value="Delete" class="btn btn-orange" onclick='return validateForm()' />
  <input type="submit" name="Edit" id="Edit" value="Edit" class="btn btn-orange" onclick='return validateForm()' />
  <input type="button" name="AddUser" id="Add User" value="Add User" class="btn btn-orange" onclick="location.href='<? echo base_url().'users/add';?>'"/>
 </form>

2 个答案:

答案 0 :(得分:1)

我在本地尝试了你的代码,过了一段时间我得到了一个解决方案:

更改您的javascript,如下所示:

function validateForm()
{
   var checkboxes = document.forms["list"]["checkID"];
   if (checkboxes.length == undefined) 
   {
      if (checkboxes.checked) {
         return true;
      }
    } else {
       for (var i = 0; i < checkboxes.length; i++) {
          if (checkboxes[i].checked) {
             return true;
          }
       }
    }
   alert("Please select a user to edit / delete.");
   return false;
}

我发现,你在validateForm()中的第一行是你所有麻烦的来源。

  

关于我的脚本的问题是,如果表只有一行

通过这种方式,浏览器以两种不同的方式存储元素。如果表单包含两个或多个具有相同名称的元素,则他将返回一个数组。如果表单只包含一个元素,他将返回一个html对象。在ord

答案 1 :(得分:0)

检查checkboxes.length值。

如果你勾选4复选框。在您的脚本中,它只会检查1复选框并返回

检查此代码。它适用于你

<script type="text/javascript">
function validateForm()
{
var check = 0;
var checkboxes = document.forms["list"]["checkID"];
   for (var i = 0; i <= checkboxes.length; i++) {
      if (checkboxes[i].checked == false) {
         check++;
      }
   }
   if(check == 0)
       return true;
   else
  {
     alert("Please select a user to edit / delete.");
     return false;
  }
}
</script>