jQuery不会在点击处理程序上绑定到图像

时间:2014-07-26 06:36:04

标签: javascript jquery binding

我使用我的servlet返回的JSON对象数组创建了一个表。我试图这样做,当我点击我在每行之前添加的图像时,它将调用一个函数。下面的代码应该可以工作,但它没有,我想我错过了一些简单的东西。

 $(document).ready(function(){
           loadData();
           $("#item").bind("click", function() { alert("test"); });
   });
function loadData(){
    $.ajax({
        type: "POST",
        url: "http://myservlet.com/orders",
        data: { }
      }).done(function( msg ) {
         response = $.parseJSON(msg);
         $.each(response, function(key,value) {
              alert(value.order_id);
              var item = 0;
              $("#ordersTable tbody").append(
                      "<tr>"+
                         "<td><img src=http://examplewebsiteurl.com/plus.png id='item'></img></td>"+
                         "<td>"+value.order_id+"</td>"+
                         "<td>"+value.sku+"</td>"+
                         "<td>"+value.quantity_purchased+"</td>"+
                         "<td>"+value.product_name+"</td>"+
                         "<td>"+value.buyer_name+"</td>"+
                         "<td>"+value.buyer_phone_number+"</td>"+
                      "</tr>"
                       );
            });
      });

}

2 个答案:

答案 0 :(得分:0)

尝试

$(document).on('click', '#item', function() {
alert("test");
});

答案 1 :(得分:0)

加载数据是异步操作,这就是为什么在填充DOM之前无法绑定任何内容的原因。您可以提供一个回调函数,以便在数据到来且可用时调用。或者您可以使用$ .ajax是Promise对象的事实。例如:

function loadData() {
    return $.ajax({
        type: "POST",
        url: "http://myservlet.com/orders",
        data: {}
    }).done(function (msg) {
        $.each(response, function (key, value) {
            var item = 0;
            $("#ordersTable tbody").append(
                "<tr>" +
                "<td><img src=http://examplewebsiteurl.com/plus.png class='item'/></td>" +
                "<td>" + value.order_id + "</td>" +
                "<td>" + value.sku + "</td>" +
                "<td>" + value.quantity_purchased + "</td>" +
                "<td>" + value.product_name + "</td>" +
                "<td>" + value.buyer_name + "</td>" +
                "<td>" + value.buyer_phone_number + "</td>" +
                "</tr>");
        });
    });
}

loadData().done(function() {
    $(".item").bind("click", function() { alert("test"); });
});