'checked'为null或不是对象 - 仅IE

时间:2010-06-18 13:14:53

标签: javascript internet-explorer

这个问题只存在于IE浏览器中,在mozilla中工作正常...我必须在点击复选框时删除一行.... 这是我的代码:

<table width="100%" id="seller">
<tr id="row_1" class="row">
 <td><input type="checkbox" name="delete_seller" id="delete_seller" value="1" /></td>
</tr>
<tr id="row_2" class="row">
 <td><input type="checkbox" name="delete_seller" id="delete_seller" value="2" /></td>
</tr>
</table>
<input type="button" id="delete" name="delete" value="Delete" onclick="delete_row('seller')"/>

    var delete_ids = [];
    function delete_row(tableID){
      var rows = document.getElementsByClassName('row');
      var delItems = document.getElementsByName('delete_seller');

      for(var i=0;i < rows.length;i++){
        if(delItems[i].checked == true){
          delete_ids.push(rows[i].id);
          jQuery(rows[i]).remove();
          i = i-1;
        }
      }
}

在页面上显示错误:'已选中'为空或不是对象
可以告诉我修复。

提前谢谢, SRI ..

2 个答案:

答案 0 :(得分:3)

你可以用jQuery替换循环,如下所示:

delete_ids.push.apply(delete_ids,
    $('tr.row:has(.delete:checked)').remove()
        .map(funcion() { return this.id; })
);

这将选择tr.row :has .delete元素的所有:checked元素。.remove()。 它调用.map()删除行,然后调用push以获取行的ID,并应用push.apply函数将它们添加到数组中。

您可以通过将其更改为

来避开 $('tr.row:has(.delete:checked)').remove() .each(funcion() { delete_ids.push(this.id); });
    $('tr.row:has(.delete_seller:checked)')
        .each(funcion() { delete_ids.push(this.id); })
        .remove();

编辑:试试这个:

{{1}}

答案 1 :(得分:0)

您的复选框和按钮都称为“删除”,您的delItems变量也会包含该按钮。该按钮没有已检查的属性,我猜这是IE抱怨它的地方。

虽然在给出的示例中,使用类'row'的元素少于名称为'delete'的元素,这意味着你没有达到循环中delItems [i]引用按钮的点。除非页面上有更多元素类'row'。