【问题标题】:How to remove table row if the form any of the input or select was empty?如果任何输入或选择的表单为空,如何删除表格行?
【发布时间】:2019-03-14 18:02:02
【问题描述】:

我有一个如下表格,如果输入文本和选择选项为空,我希望删除 tr 行。如果任何输入不为空,则显示表格行

你可以看到输入不是空的,它正在删除整行,可以检查两者都不为空然后删除

使用 Jquery

注意:表格行是动态添加的

$(function(){
$("table#my_form tr td").each(function(){
  $(this).find('input, select').each(function(){
      if($(this).val()==""){
        $(this).closest('tr.table_row').remove();
      }
  })
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="POST" action="">

<table id="my_form">
    <tr class="table_row">
       <td>
            <input type="text" name="company" value="TCS" />
        </td>
        <td>
        	<select name="favorites" id="favorites">
        		<option value="">Select Favorites</option>
        		<option value="chess">Chess</option>
        		<option value="caroms" selected>Caroms</option>
        		<option value="ruby">Ruby</option>
        	</select>
        </td>
    </tr>
        <tr class="table_row">
       <td>
            <input type="text" name="company" value="Deloite" />
        </td>
        <td>
        	<select name="favorites" id="favorites">
        		<option value="">Select Favorites</option>
        		<option value="chess">Chess</option>
        		<option value="caroms">Caroms</option>
        		<option value="ruby">Ruby</option>
        	</select>
        </td>
    </tr>

    <tr class="table_row">
       <td>
            <input type="text" name="company" value="GOOGLE" />
        </td>
        <td>
        	<select name="favorites" id="favorites">
        		<option value="">Select Favorites</option>
        		<option value="chess" selected>Chess</option>
        		<option value="caroms">Caroms</option>
        		<option value="ruby">Ruby</option>
        	</select>
        </td>
    </tr>
</table>
</form>

【问题讨论】:

  • 很好奇,我不知道这里的完整上下文,所以这可能不适用。但是,为什么要专注于删除一行 - 如果 input 有效,为什么不只添加一行?
  • 如果动态添加行,什么会触发删除行?您发布的代码只会在页面加载时运行一次。
  • 输入改变时是否要删除该行?然后你应该将删除代码放入例如$(this).find('input, select').change(...

标签: javascript jquery


【解决方案1】:

要检查所有输入,您可以尝试这样的操作。正如您所提到的,您正在动态添加行,因此您希望其他一些事件处理程序再次检查更多错误行。此代码将在页面加载时运行一次,然后在单击 '#removeBadRows' 按钮时再次运行。

$(function () {
    removeBadRows();

    $(document).on('click', '#removeBadRows', function () {
        removeBadRows();
    });
});

function removeBadRows() {
    $("table#my_form tr").each(function () {
        var badCount = 0;
        var inputLength = $(this).find('input, select').length;
        $(this).find('input, select').each(function () {
            if ($(this).val() == "") {
                badCount++;
            }
        });
        if (badCount == inputLength) {
            $(this).remove();
        }
    });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="POST" action="">

    <table id="my_form">
        <tr class="table_row">
            <td>
                <input type="text" name="company" value="test" />
            </td>
            <td>
                <select name="favorites" id="favorites">
                    <option value="">Select Favorites</option>
                    <option value="chess">Chess</option>
                    <option value="caroms" selected>Caroms</option>
                    <option value="ruby">Ruby</option>
                </select>
            </td>
        </tr>
        <tr class="table_row">
            <td>
                <input type="text" name="company" value="" />
            </td>
            <td>
                <select name="favorites" id="favorites">
                    <option value="" selected>Select Favorites</option>
                    <option value="chess">Chess</option>
                    <option value="caroms">Caroms</option>
                    <option value="ruby">Ruby</option>
                </select>
            </td>
        </tr>
        <tr class="table_row">
            <td>
                <input type="text" name="company" value="GOOGLE" />
            </td>
            <td>
                <select name="favorites" id="favorites">
                    <option value="">Select Favorites</option>
                    <option value="chess">Chess</option>
                    <option value="caroms">Caroms</option>
                    <option value="ruby" selected>Ruby</option>
                </select>
            </td>
        </tr>
    </table>
</form>

【讨论】:

  • 嗨@Nicolay,我有第二个输入不是空的,但它正在删除行
  • 逻辑很简单,你在它可能找到的表格行中是否有任何隐藏的输入?
  • 我没有其他输入,请检查您的代码
  • 用 sn-p 编辑了我的帖子,对我来说按预期工作,根据逻辑,应该删除第 2 行,因为它在选择中没有价值,第 1 和第 3 行是好的。跨度>
  • 但是输入不是空的,你已经检查了两个输入。你的代码和我的代码没有区别
【解决方案2】:

这可能是最简单的方法

$(function(){
  $(document).on('change', '.table_row input', function(e) {
    if($(this).val()==""){
      $(this).closest('.table_row').remove();
    }
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2019-06-18
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多