向表添加行并发送到服务器,通过jquery将表发布到php

时间:2015-11-20 18:38:48

标签: javascript php jquery ajax html-table

我正在尝试创建一个表,我可以通过单击按钮添加新行,然后将表发送到服务器,以便记住页面刷新时的信息。下面是一个按钮,它成功地将一行添加到具有当前时间的表中。但是,当我通过“发送到服务器”按钮将表发送到服务器时,它不会回显更新的表,只回显原始的表。能够解决这个问题会让人感到宽慰。

HTML:

<input type = "button" id = "send" value = "Send to Server" />
<input type = "button" id = "add" value = "Add Row" />
<table class="table table-striped">
        <tr>
            <td><h2>In</h2></td>
            <td><h2>Out</h2></td>
            <td><h2>Total</h2></td>
        </tr>
        <tr>
            <td>InData</td>
            <td>OutData</td>
            <td>TotalData</td>
        </tr>
</table>

JS:

<script language="javascript" type="text/javascript" src="jquery-1.8.2.js"></script>
<script language="javascript" type="text/javascript">

$("#add").click(function(){

    var dt = new Date();
    var time = dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds(); //set variable to current time
    $('table > tbody:last').append('<tr><td>'+time+'</td><td></td><td></td></tr>'); //add row to table with current time

});

$(function(){
    var dataArr = [];
    $("table").each(function(){
        dataArr.push($(this).html());
    });
    $('#send').click(function(){
        $.ajax({
          type : "POST",
          url : 'timesheet.php',
          data : "content="+dataArr,
          success: function(data) {
              alert(data);// alert the data from the server
          },
          error : function() {
          }
         });
    });
});
</script

PHP(timesheet.php):

<?php 
    echo $_REQUEST['content'];
?>

1 个答案:

答案 0 :(得分:1)

  

当我通过“发送到服务器”按钮将表发送到服务器时,它不回显更新的表,只反映原始表。

<强>解决方案

使用.on()代替.click()

<script language="javascript" type="text/javascript" src="jquery-1.8.2.js"></script>
<script language="javascript" type="text/javascript">

$(document).on('click', '#add', function(){

    var dt = new Date();
    var time = dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds(); //set variable to current time
    $('table > tbody:last').append('<tr><td>'+time+'</td><td></td><td></td></tr>'); //add row to table with current time

});

$(document).on('click', '#send', function(){
    var dataArr = [];
    $("table").each(function(){
        dataArr.push($(this).html());
    });
    $('#send').click(function(){
        $.ajax({
          type : "POST",
          url : 'timesheet.php',
          data : "content="+dataArr,
          success: function(data) {
              alert(data);// alert the data from the server
          },
          error : function() {
          }
         });
    });
});
</script>

<强>编辑:

您正在使用的click()绑定称为“直接”绑定,它只会将处理程序附加到已存在的元素。它不会受到将来创建的元素的约束。为此,您必须使用on()创建“委托”绑定。

来自documentation of .on()

  

委托事件的优势在于它们可以处理来自稍后添加到文档的后代元素的事件。