如何为<;a>;ajax响应中的元素


How to set jquery function for all of <a> element in ajax response

我有一个带有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) {