【问题标题】:Don't remove the last one row jQuery不要删除最后一行 jQuery
【发布时间】:2014-03-10 01:00:33
【问题描述】:

我有一个使用 jQuery 填充表格的表单,代码工作正常问题是当我只有一行时我不知道如何禁用删除按钮。我的意思是如果是最后一行,我不想删除该行。

表格

<form name="prescor" id="prescor" method="post" action="#">
<table class="formulario">
    <tr>
    <td>Cantidad</td>
    <td><input name="cant" type="text" id="cant" autocomplete="off" onKeyUp="subtotal()" pattern="[0-9]*." step="any"></td>
    <td>Artículo</td>
    <td><input name="idarti" type="text" id="idarti" autocomplete="off" ></td>
</tr>
<tr>
    <td>Precio</td>
    <td><input name="prec" id="prec" autocomplete="off" onKeyUp="subtotal()"></td>
    <td>Total</td>
    <td><input name="tota" type="text" id="tota" readonly></td>
    <td><input name="agregar" type="button" value="Agregar" onclick="fn_agregar()" /></td>
</tr>
</table>
<table id="grilla" class="lista">
<thead>
<tr>
    <th>Cant.</th>
    <th>Artículo</th>
    <th>Precio</th>
    <th>Subtotal</th>
    <th></th>
</tr>
</thead>
<tbody>
</tr>
</tbody>
<tfoot>
    <tr>
    <td colspan="2"><strong>No. Lineas:</strong> <span id="span_cantidad"></span></td>
</tr>
</tfoot>
</table>

脚本

$(document).ready(function(){
fn_eliminar();
fn_cantidad();
});

function fn_cantidad(){
var n = $("#grilla tbody").find("tr").length;
$("#span_cantidad").text(n);
};

function fn_agregar() {
cadena = "<tr>";
cadena = cadena + "<td><input type='text' name='cantidad[]' value='" + $("#cant").val() + "' readonly size='1' required></td>";
cadena = cadena + "<td><input type='text' name='idarticulo[]' value='" + $("#idarti").val() + "' readonly size='2' required></td>";
cadena = cadena + "<td><input type='text' name='precio[]' value='" + $("#prec").val() + "' readonly size='4' required></td>";                                               
cadena = cadena + "<td><input type='text' name='subtotal[]' value='" + $("#tota").val() + "' readonly size='7' required></td>";             
cadena = cadena + "<td><a class='elimina'><img src='cancelar.png' width='16' height='16' title='Eliminar Fila'/></a></td>";
$("#grilla tbody").append(cadena);
document.getElementById("idarti").value="";
document.getElementById("cant").value="";
document.getElementById("prec").value="";
document.getElementById("tota").value="";
fn_eliminar();
fn_cantidad();
};

function fn_eliminar()
{
    $("a.elimina").click(function()
    {
        id = $(this).parents("tr").find("td").eq(0).html();
        $(this).parents("tr").fadeOut("normal", function()
        {
            $(this).remove();
            fn_cantidad();
        })
    });
}

【问题讨论】:

    标签: jquery dynamic html-table rows


    【解决方案1】:

    你可以数一下表格的行数..

    例如,

    HTML

       <table class="invoice-table">
            <thead>
               <tr>
                  <th>col 1</th>
                  <th>col 2</th>
                  <th>col 3</th>
                  <th>Action</th>
               </tr> 
           </thead>
           <tbody>
               <tr>
                  <td>col 1</td>
                  <td>col 2</td>
                  <td>col 3</td>
                  <td>
                   <button type="button" class="remove-row"> DELETE </button>
                  </td>
               </tr>
           </tbody>
        </table>
    

    JQUERY

    $(document).on('click', '.remove-row', function(){ 
         var rows = $('.invoice-table').find('tbody').children('tr').length;
         if(rows > 1)
         {  
            $(this).closest("tr").remove();
         }
         else
         {
            alert("There must be at least one row in the table");
         }
    });
    

    【讨论】:

      【解决方案2】:

      在删除处理程序中检查是否只剩下一项,如果是,则不要做任何事情。

      还使用事件委托来处理删除元素单击,在您的代码中,您将多个单击处理程序应用于删除元素,因为每次调用 fn_eliminar 它都会向所有先前存在的删除元素添加一个新的单击处理程序

      $(document).ready(function () {
          fn_eliminar();
          fn_cantidad();
      });
      
      function fn_cantidad() {
          var n = $("#grilla tbody").find("tr").length;
          $("#span_cantidad").text(n);
      };
      
      function fn_agregar() {
          cadena = "<tr>";
          cadena = cadena + "<td><input type='text' name='cantidad[]' value='" + $("#cant").val() + "' readonly size='1' required></td>";
          cadena = cadena + "<td><input type='text' name='idarticulo[]' value='" + $("#idarti").val() + "' readonly size='2' required></td>";
          cadena = cadena + "<td><input type='text' name='precio[]' value='" + $("#prec").val() + "' readonly size='4' required></td>";
          cadena = cadena + "<td><input type='text' name='subtotal[]' value='" + $("#tota").val() + "' readonly size='7' required></td>";
          cadena = cadena + "<td><a class='elimina'><img src='cancelar.png' width='16' height='16' title='Eliminar Fila'/></a></td>";
          $("#grilla tbody").append(cadena);
          document.getElementById("idarti").value = "";
          document.getElementById("cant").value = "";
          document.getElementById("prec").value = "";
          document.getElementById("tota").value = "";
          fn_cantidad();
      };
      
      function fn_eliminar() {
          $("#grilla tbody").on('click', 'a.elimina', function () {
              if ($('#grilla tbody tr').length == 1) {
                  return;
              }
              var id = $(this).closest("tr").find("td").eq(0).html();
              $(this).closest("tr").fadeOut("normal", function () {
                  $(this).remove();
                  fn_cantidad();
              })
          });
      }
      

      【讨论】:

      • 感谢您的帮助,解决方案是 if ($("#grilla tbody tr").length > 1){ $(this).parents("tr").fadeOut("normal",函数(){ $(this).remove(); fn_cantidad(); }); }
      猜你喜欢
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多