我有具有全选/全选复选框功能的表,并且表具有和一些输入字段,例如文本框,下拉列表。用户应至少选择一个复选框来处理表中的数据。很好。例如,表有3行,用户选择任何一个复选框,然后单击Submit按钮,则其余两行应被删除而不是提交。我尝试了以下一种。
$("input:not(:checked)").each(function () {
$('input:not(:checked)').closest('tr').remove();
});
答案 0 :(得分:1)
对我来说似乎不错:https://jsfiddle.net/r9zgvbqu/7/
两个注释,您正在使用.each()
函数对"input:not:(:checked)"
选择的所有元素执行某项操作,但是在该函数中再次选择了所有内容。所以您只是多次做同一件事。您可以跳过该步骤,也可以跳过以下建议的.each()
-$(this)
组合,方法是直接进行以下操作:
$("input:not(:checked)").closest('tr').remove();
这会删除您想要的所有内容。
编辑:您的问题是您正在选择所有未选中的输入,包括文本输入等。您可以指定选择的输入类型:input[type=checkbox]:not(:checked)
通常,我会避免按标签名称选择元素。最好给相关复选框一个类,然后可以按类选择它们。
这是您的提琴的固定版本:https://jsfiddle.net/927sdh8n/
这是使用类的更简单,更安全的版本:https://jsfiddle.net/qz53wfxc/
答案 1 :(得分:1)
假设您不使用<th></th>
,那么标题行也被选中,因为该复选框也未选中。可能这就是所有行都被删除的原因。控制台input:not:(:checked)
。它将给出清晰的主意。
编辑: 然后尝试这个,也许会起作用
$('#tableid').find('tr[input:not:(:checked)]').each(function()
{
$(this).remove();
}