我正在尝试创建一个表,在其中可以单击按钮添加新行,然后将表发送到服务器,以便它记住有关页面刷新的信息。下面是一个按钮,该按钮可将当前时间成功添加到表中。但是,当我通过“发送到服务器”按钮将表发送到服务器时,它不会回显更新的表,而仅是原始表。弄清楚这一点真是令人欣慰。
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()
创建“委托”绑定。从documentation of
.on()
:委派事件的优势在于,它们可以处理来自后代元素的事件,这些事件在以后的时间添加到文档中。