我有一个带有ajax代码的函数,可以通过用户名从表过滤器中获取数据。
function showdata(){
var username = $("#username").val(); // input:text element id = 'username'
$.ajax({
type:"POST",
url:"purchase_process.php",
data: "act=show&username=" + username,
success: function(data){
$("#show_data").html(data); // div element with id = 'show_data'
$("#show_data").fadeIn(2000);
}
});}
showdata();
$(".del_button").click(function(e) {
e.preventDefault();
var id = $(this).attr('id');
var no = id.split('-');
var number= no[1];
var username = $("#user_"+number).val();
var code = $("#code_"+number).val();
$.ajax({
type:"POST",
url:"purchase_process.php",
data: "act=delete&username=" + username + "&code=" + code ,
success: function(data){
$("#info").html(data); // div element id = info
showdata();
}
}); });
下面是purchase_process.php的ajax响应,它显示了表中的所有数据数据的每一行都有元素显示在图像中(delete.png)以删除行:
<table id='purchase_table' name='purchase_table' border='0' class='table'>
<thead>
<tr><th><center>No.</center></th>
<th><center>Part Number</center></th>
<th><center>Part Name</center></th>
<th><center>Location</center></th>
<th><center>Qty</center></th>
<th><center>Cost</center></th>
<th><center>Subtotal</center></th>
<th><center>Action</center></th>
</tr>
</thead>
<tbody>
<tr>
<td width=70><center>$no</center></td>
<td>
<center>$r[part_code]</center>
<input type=hidden id='user_$no' name='user_$no' maxlength=20
value='$_POST[username]' readonly>
<input type=hidden id='part_$no' name='part_$no' maxlength=20
value='$r[part_code]' readonly>
</td>
<td>$r[part_name]</td>
<td><center>$r[location]</center></td>
<td><center>$r[qty]</center></td>
<td><center>".number_format($r['cost'],2,",",".")."</center></td>
<td><center>".number_format($subtotal,2,",",".")."</center></td>
<td width=80><center>
<a href='#' class='del_button' id='del-$no' name='del-$no'>
<img src='img/delete.png'>
</a>
</center></td>
</tr>
</tbody>
</table>
函数showdata()运行良好,但jquery函数事件:每当我点击图像(delete.png)时,用class="del_button"点击"a"元素都没有响应但是,如果我在该页面中创建相同的"a"元素,那么jquery函数运行良好。我假设jquery函数没有得到"a"元素值,因为它是从ajax响应中调用的。
有人能帮我解决这个麻烦吗?谢谢你。。。
jQuery在运行时只知道页面中的元素,因此添加到DOM中的新元素无法被jQuery识别。为了解决这个问题,您必须使用事件委派,从新添加的项中冒泡事件,直到jQuery在页面加载时运行时DOM中的某个点。许多人使用document
作为捕捉冒泡事件的地方,但没有必要在DOM树上走那么高。当然,您应该委托给页面加载时存在的最近的父级。
$(document).on('click', '.del_button', function(e) {