【问题标题】:Adding rows in the table with javascript使用javascript在表格中添加行
【发布时间】:2019-12-02 23:08:23
【问题描述】:

我有一个包含主明细数据的表格。我已经为详细信息创建了一个表格,并使用 JavaScript 在按钮单击时创建行,但是一旦我单击添加行按钮,它就会添加行,并且我的页面会立即重新加载,因此添加的行会消失。我有另一个按钮来执行其他 PHP 任务,所以我不能删除表单标签。请帮我完成这件事。 以下是 HTML 和 JavaScript 代码。

<div class="row pt-3">
                <div class="table-responsive">
                  <table id="vattable" class="table table-sm table-striped">
                    <thead class="thead-light">
                      <tr>
                        <th><?php echo GetBilingualLabels($_SESSION['$language'],"VATSETUP","VSDID"); ?></th>
                        <th><?php echo GetBilingualLabels($_SESSION['$language'],"VATSETUP","VSDSCATEGORY"); ?></th>
                        <th><?php echo GetBilingualLabels($_SESSION['$language'],"VATSETUP","VSDRATE"); ?></th>
                        <th><?php echo GetBilingualLabels($_SESSION['$language'],"VATSETUP","VSDAUTOFLAG"); ?></th>
                      </tr>
                    </thead>
                    <tbody>
                      <tr>
                        <td><input type="text" class="text-control input-sm" readonly name="vsdid[]" id="vsdid" value=1 style="text-align:right" maxlength="13" /></td>
                        <td><input type="text" class="text-control" name="vsdscategory[]" id="vsdscategory1" style="text-align:right" maxlength="13" /></td>
                        <td><input type="text" class="text-control" name="vsdrate[]" id="vsdrate1" style="text-align:right" maxlength="13" /></td>
                        <td><input type="text" name="vsdautoflag[]" id="vsdautoflag1" style="text-align:right" maxlength="13" autofocus /></td>
                      </tr>
                    </tbody>
                  </table>
                </div>
              </div>


<script>
  $(document).ready(function() {
    $('[data-toggle="tooltip"]').tooltip();
    var count=1;
    $(document).on('click','#addrow', function(){
      //alert('a');
      count=count+1;
      $('#vsdid').val(count);
      //alert(count);
      var html_code='';
      html_code +='<tr id="row_id_'+count+'">';
      html_code += '<td><input type="text" class="text-control input-sm" name="vsdid[]" id="vsdid'+count+'" style="text-align:right"/></td>';
      html_code +='<td><input type="text" class="text-control" name="vsdscategory[]" id="vsdscategory'+count+'" /></td>';
      html_code +='<td><input type="text" class="text-control" name="vsdrate[]" id="vsdrate'+count+'" style="text-align:right" maxlength="13" /></td>';
      html_code +='<td><input type="text" name="vsdautoflag[]" id="vsdautoflag'+count+'" style="text-align:right" /></td>';
      html_code +='<td><button type="submit" name="removerow" id="removerow" class="btn btn-danger fa fa-minus"></button></td></tr>';
      $('#vattable').append(html_code);
      //alert(html_code);
    });
  });
</script>

【问题讨论】:

  • 您的#addrow 按钮可能是提交按钮并且正在提交表单。在//alert(html_code) 之后添加return false
  • 非常感谢,现在可以使用了。
  • 我怎样才能解决它。

标签: javascript html


【解决方案1】:

您的#addrow 按钮可能是提交按钮并且正在提交表单。在//alert(html_code) 之后添加return false

【讨论】:

    【解决方案2】:

    您尚未添加按钮来添加行,因此您可能会观察到副作用。

    如果我理解正确,您希望有一个按钮,点击后将执行您创建的功能。因此,您可以在表格 div 下方添加一个 ID 为 addrow 的按钮,如下所示:

     <button id="addrow">
        Add Row
     </button>
    

    然后您可以在开始时通过 jQuery 附加您的函数(我稍微修改了您的脚本) - 请参阅 JsFiddle - https://jsfiddle.net/9Ljc237k/9/

    【讨论】:

      【解决方案3】:

      在您的添加行按钮中单击您应该在最后return false, 或将按钮标签的类型属性设置为button 而不是submit

      最好将行附加到tbody 标签而不是table

      【讨论】:

        【解决方案4】:

        如果你只有重新加载的问题,你应该把 event.preventDefault()

         $(document).on('click','#addrow', function(event){
               event.preventDefault();
              //alert('a');
              count=count+1;
              $('#vsdid').val(count);
              //alert(count);
              var html_code='';
              html_code +='<tr id="row_id_'+count+'">';
              html_code += '<td><input type="text" class="text-control input-sm" name="vsdid[]" id="vsdid'+count+'" style="text-align:right"/></td>';
              html_code +='<td><input type="text" class="text-control" name="vsdscategory[]" id="vsdscategory'+count+'" /></td>';
              html_code +='<td><input type="text" class="text-control" name="vsdrate[]" id="vsdrate'+count+'" style="text-align:right" maxlength="13" /></td>';
              html_code +='<td><input type="text" name="vsdautoflag[]" id="vsdautoflag'+count+'" style="text-align:right" /></td>';
              html_code +='<td><button type="submit" name="removerow" id="removerow" class="btn btn-danger fa fa-minus"></button></td></tr>';
              $('#vattable').append(html_code);
              //alert(html_code);
            });
        

        【讨论】:

        • 非常感谢它使用这两个命令作为第一个答案返回 false 以及第二个答案 event.preventDefault();
        • 除此之外,我还添加了一个按钮来删除 JavaScript 添加行中的记录,如下所示.. html_code +='';我已经编写了另一个 JavaScript 函数来删除行,但它不起作用 $(document).on('click','.removerow',function(){ var row_id=$(this).attr("id"); $('#row_id_'+row_id).remove; count=count-1; });
        • 请记住,这种方法只是一种 hack - 在不了解问题且未考虑最佳实践的情况下进行修复。该按钮很可能是提交表单按钮,而您正在阻止默认操作 - 提交表单。相反,我认为最好在表单外部创建一个普通按钮并为其附加一个 onclick 添加行操作。
        • 谢谢,如果我将类型从“提交”更改为“按钮”,它可以在不添加上述任何命令的情况下工作。请查看我关于删除行的另一个评论部分。
        • remove 是一个函数,所以你必须这样做 $('#row_id_'+row_id).remove();但你也可以试试 $('#vattable').remove('#row_id_'+row_id)
        猜你喜欢
        • 2018-11-25
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2017-07-22
        • 2011-06-14
        • 1970-01-01
        相关资源
        最近更新 更多