【问题标题】:JQuery delete rows allow a maximum of totalrows-1JQuery 删除行最多允许totalrows-1
【发布时间】:2016-01-27 02:34:27
【问题描述】:

我在 jQuery 中有一个带有添加和删除功能的动态表:

我正在使用以下内容删除行:

$("#DEL").click(function(){
    $("table tr input:checked").parents('tr').remove();
});

小提琴:FIDDLE

如何避免同时删除所有列。我的意思是如果用户检查了所有行并单击删除,它应该显示一条警报消息。 应该允许删除最多totalrows-1

【问题讨论】:

  • 如果您只希望他们一次删除一行,也许您应该考虑在每一行中都有一个删除按钮,该按钮将删除该行而不是每行中的复选框,这意味着您不要'不需要编写代码来阻止这种形式的发生。
  • @Dhunt 我想根据我的情况同时删除多行!!
  • Dhunt OP 不希望这样。相反,他想阻止用户一次删除所有行。首先应该取消选中一行。
  • @Navoneel 我更喜欢 javascript
  • @Santhucool 啊,我的错

标签: jquery html-table delete-row


【解决方案1】:

您可以使用 jquery 的 size() 函数来计算检查输入的行数并与总行数进行比较。

$("#DEL").click(function(){
    var checked = $("table tr input:checked").size();
    var total = $("table tr").size();
    if (checked < total) {
        $("table tr input:checked").parents('tr').remove();
    } else {
        alert("You cannot delete all rows!");
    }
});

查看更新的小提琴here

【讨论】:

    【解决方案2】:

    尝试添加检查 .length of tr 元素

      $("#DEL").click(function () {
        console.log($("table tr input:checked").length)
        if ($("table tr").length === 1 
           || $("table input:checked").length === $("table tr").length) {
            alert("cannot delete last tr")
        } else {
            $("table tr input:checked").parents('tr').remove();
        }
      });
    

    jsfiddle http://jsfiddle.net/qN2Z8/72/

    【讨论】:

    • 以删除第一行和第三行为例怎么办?应该可以的
    • @guest271314 如果有不止一行,你仍然可以删除所有这些并检查所有这些
    【解决方案3】:

    这将完全按照您想要的方式工作,只要不是所有行都被选中,它将删除每个选中的行,如果全部选中,第一个将保持未删除JSFiddle

    $("#ADD").click(function(){
        $("table").append($("tr:last").clone(true));
        $("tr:last input").val("");
    });
    
    $("#DEL").click(function(){
        var totalRows = $("table tr").length;
        var totalRowsChecked = $("table tr input:checked").length;
        if(totalRows == totalRowsChecked){
            $("table tr:not(:first) input:checked").parents('tr').remove();
        }else{
            $("table tr input:checked").parents('tr').remove();
        }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <BUTTON ID="ADD">ADD</button>
    <BUTTON ID="DEL">DELETE</button>
    <TABLE>
        <TR>
            <TD>
                <INPUT TYPE='CHECKBOX' />
            </TD>
            <TD>
                <INPUT TYPE='TEXT' CLASS='MYTEXT'/>
            </TD>
            <TD>SOMETHING</TD>
        </TR>
    </TABLE>

    更新: 在所有行都选中时显示警报:

    $("table tr:not(:first) input:checked").parents('tr').remove();
    

    应该改成这样:

    alert("Sorry, cannot delete all rows");
    

    【讨论】:

    • 感谢您的反对,1st: 通常有不止一种方法可以解决编程问题,2nd: 它确实适用于 SO并且在 jsfiddle 上,只要不是所有行都被检查,它会删除检查的行,否则第一行保持未删除!
    • @Francescoes.,例如看看这个 SO question。它有 13 个答案,其中 3 个是 10+ 赞成票,其中 4 个是 1000+ 赞成票,其余是 100+ upvote.. 虽然它已解决,但他们的答案仍然有效且有效! stackoverflow.com/questions/11227809/…
    • 冷静点,我纠正自己:它没有按预期工作,你的代码运行,不好,但是运行。 1st:你没有注意到用户,没有反馈(不好)。 2st:在问题中指定检查可以是== lengtht -1,这意味着最后一个应该总是空的,所以你的答案来晚了,它不那么'优雅'并且没有' t 解决问题。我只是想知道谁支持你以及为什么
    • 在问题“应该允许删除最多totalrows-1”中,我的解决方案确实删除了totalrows -1,请检查它们并删除它们,看看! !,但是我为没有显示alarm而道歉,我没有在问题中注意到它,只有这是我的错,这很容易修复,我的代码仍然删除了总长度 - 1 当它们都被检查时,我将更新答案以包含警报
    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多