这个问题只存在于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;
}
}
}
在页面上显示错误:'已选中'为空或不是对象。
可以告诉我修复。
答案 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'。