【问题标题】:Ajax works only onceAjax 只工作一次
【发布时间】:2017-10-16 06:11:38
【问题描述】:

我有这个带有一些输入字段的表单,在提交表单时,数据会附加到一个表格中,更像是一个列表。数据被附加到表列表中,并使用 ajax 发送到数据库,当我单击提交时,这两个操作都会发生。下面是表格。

<div id ="product_calculator" style="border: 1px solid gray; padding: 10px; display:none;margin-top: 5px;"><br>
    <div class="row">
        <div class="col-md-2">
            <label>Product Name</label>
            <input class="form-control" name="productname" type="text" id="productname" value=""><br>
        </div>
        <div class="col-md-2">
            <label>Width</label>
            <input class="form-control" name="width" step ="any" type="text" id="width" value=""><br>
        </div>
        <div class="col-md-2">
            <label>Height</label>
            <input class="form-control" name="height" step ="any" type="text" id="height" value=""><br>
        </div>
        <div class="row">
            <div class="col-md-1">
                <input type="button" class="btn btn-default" name="submit" class="submit" id="submit" class="btn btn-info" value="ADD TO LIST" />  
            </div>
        </div>  

这是附加数据的表,

<div>
    <table class="table table-hover">
        <thead>
           <tbody class="details">
           </tbody>
        <tfoot>
        </tfoot>
    </table>
</div>

这是我将数据附加到列表并将其发送到数据库的 jquery 和 ajax,您也可以将删除按钮附加到每个附加的列表项

$('#submit').on("click" , function(){
    var productname = $('#productname').val();
    var width = $('#width').val();
    var height = $('#height').val();
        $.ajax({
          url:"item_list_process.php",
          method:"POST",
          data:{productname:productname,width:width,height:height},
          success:function(data){
              $("#list_message").html(data)
          }
      })

    var tr = '<tr>'+
               '<td><input type="text" name="product_name[]" required class="form-control product_name" value="'+productname+'"></td>'+
               '<td><input type="text" name="width[]" required class="form-control width" value="'+width+'"></td>'+
               '<td><input type="text" name="height[]" required class="form-control height" value="'+height+'"></td>'+

               '<td><input type="button" name="remove" class="btn btn-danger remove" value="Remove"></td>'+
          '</tr>';
      $('.details').append(tr);

})      

现在您可以看到我为每个列表项附加了一个删除按钮,单击该按钮后,我使用 ajax 和 jquery 从表以及数据库中删除了列表项。代码如下,我使用附加列表中的数据将其发送到 php 以识别要删除的项目行

$('.details').on('click','.remove',function(){
    var con = confirm("Do you want to remove it ?");
    if(con){
        var pro = $('.product_name').val();
        var wid = $('.width').val();
        var hei = $('.height').val();
            $.ajax({
              url:"item_list_delete.php",
              method:"POST",
              data:{pro:pro,wid:wid,hei:hei},
              success:function(data){
                  $("#delete").html(data)
              }
          })
        $(this).parent().parent().remove();     
    }
});

现在的问题是当我删除数据时,ajax 似乎只在从数据库中删除数据时工作一次,之后它就不再工作了,例如假设我有 4 个项目,假设我点击了第三个项目,该项目从数据库中删除,也从列表中删除,但是当我在删除第三个项目后单击第一个项目时,ajax dosent 不再工作,也不再适用于我的列表项目点击他们的删除按钮。

【问题讨论】:

  • 你如何包装这些行$('.details').on('click','.remove',function(){$('#submit').on("click" , function(){?文档准备好还是 Windows 正在加载?
  • 你试过使用调试器吗?
  • $(document).ready()
  • 一切正常,只有我必须从列表中删除项目的 ajax 部分,ajax 似乎只对第一个项目有效,之后无论我点击删除多少次我的其他项目的按钮,它只会从列表中删除( $(this).parent().parent().remove(); 这有效),但不会从数据库中删除
  • 尝试将此$('.details').on 更改为此$('document').on。但我认为问题出在浏览器开发工具(F12)中的数据。然后查看元素以查看输入的值。这些是一样的还是不一样的?

标签: javascript php ajax


【解决方案1】:

检查通过 $("#delete").html(data) 传递给 id='delete' 的内容。 因为如果您通过 ajax 类操作任何数据,则不会考虑下一步操作。

您可以通过添加 alert('test'); 在点击天气动作触发器时检查它。

对于每一行,您可以通过向其附加行 ID 来考虑不同的 ID。当您对删除按钮执行任何操作时,您可以根据唯一 ID 删除特定行。 喜欢

【讨论】:

  • 是的,我确实检查了通过 $("#delete").html(data); 传递的内容;从那里我发现只有第一个项目数据正在发送,当我点击第二个项目后,它显示我通过 $("#delete").html(data) 点击的第一个项目的数据,同样的事情发生对于我的所有其他项目,重点是仅显示我单击的第一个项目的数据,当我通过 $("#delete") 单击第一个后单击我的其他列表项时,会显示相同的第一个项目数据。 html(数据)
  • 这种情况很容易处理,您可以尝试创建一个循环,例如 for($i=1;$i

    ";然后在 ajax 你可以尝试 $(document).on('click','.removebutton',function(){ var id = $(this).attr('data-id'); var id = $(this ).attr('data-name'); //--- Purform Ajax action here -- if(sucess) //移除带有特定id值的已删除行数据 });

猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多