当用户单击“提交”按钮

时间:2020-10-01 08:56:58

标签: javascript jquery

我有具有全选/全选复选框功能的表,并且表具有和一些输入字段,例如文本框,下拉列表。用户应至少选择一个复选框来处理表中的数据。很好。例如,表有3行,用户选择任何一个复选框,然后单击Submit按钮,则其余两行应被删除而不是提交。我尝试了以下一种。

$("input:not(:checked)").each(function () {
      $('input:not(:checked)').closest('tr').remove();
});

但这是要删除整个表。因此,我只需要删除那些未选中的表行。任何帮助将不胜感激。 enter image description here

2 个答案:

答案 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();
}