Я пытаюсь создать таблицу, где я могу добавить новую строку нажатием кнопки, а затем отправить таблицу на сервер, чтобы она запоминала информацию на странице обновления. Ниже приведена кнопка, которая успешно добавляет строку в таблицу с текущим временем. Однако, когда я отправляю таблицу на сервер с помощью кнопки «Отправить на сервер», она не отсылает обновленную таблицу, а только оригинал. Было бы таким облегчением понять это.
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']; ?>
когда я отправляю таблицу на сервер с помощью кнопки «Отправить на сервер», она не отсылает обновленную таблицу, а только оригинал.
Решение
Используйте .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()
.
Из документации .on()
:
Преимуществом делегированных событий является то, что они могут обрабатывать события из элементов-потомков, которые будут добавлены в документ позже.