jQuery:link失去了它的类';附加时的可点击性

jQuery:link失去了它的类';附加时的可点击性,jquery,Jquery,以下是我的AJAX调用: $.ajax({ type: 'POST', url: '<?php echo site_url('channel_partners/cms/get_news'); ?>', data: data, dataType: 'json', success: function(data, status, xhr) { var json = JSON.pa

以下是我的AJAX调用:

    $.ajax({
        type: 'POST',
        url: '<?php echo site_url('channel_partners/cms/get_news'); ?>',
        data: data,
        dataType: 'json',
        success: function(data, status, xhr) {
            var json = JSON.parse(data);
            for (var i=0; i<json.length; i++) {
                $('ul#news').append(
                '<li id="' + json[i].article_id + '"><a class="deleteItem" title="Delete Item" href="#">Delete</a> 
<a id="editItem" title="Edit Item" href="#" target="_blank">Edit</a>
 <a href="#" target="_blank">' + json[i].title + '</a></li>'
               );               
                 }
         },
        error: function(xhr, status, error) {
            //alert('Error: ' + status + ' ' + error);
            console.log(xhr)
        }
    });
$.ajax({
键入:“POST”,
url:“”,
数据:数据,
数据类型:“json”,
成功:功能(数据、状态、xhr){
var json=json.parse(数据);

对于(var i=0;i而不是使用
click()
,将事件处理程序附加到。

好吧,这就是发生的情况

  • 页面DOM加载
  • 您可以添加.deleteItem单击处理程序
  • 您可以动态添加html
  • 当然,您在(3)中添加的项目没有任何单击处理程序。您需要做什么
    是在添加html代码后添加点击处理程序(或查看
    $.live

    您没有显示链接的工作方式,但我假设您使用
    .click()
    .on()的非委托形式将处理程序附加到原始的.deleteItem”链接
    -其中任何一种只适用于当时存在的元素。如果动态添加新元素(例如,在Ajax调用之后),则需要在添加新元素后绑定单击处理程序(例如,在Ajax成功处理程序中)。或者,您可以使用委派事件:

    $("#news").on("click", ".deleteItem", function() {
        // your delete handling code here
    });
    
    // OR for jQuery versions older than 1.7
    $("#news").delegate(".deleteItem", "click", function() {
        // your delete handling code here
    });
    
    // OR for really old jQuery versions
    $(".deleteItem").live("click", function() { ... });
    

    使用或,处理程序将绑定到容器对象,并将自动应用于与第二个选择器匹配的任何子对象,无论它们是否存在于页面加载中或稍后添加
    函数已被弃用,但在版本1.4.2之前,它是您唯一的选择-它的工作方式类似,但将处理程序绑定到文档,因此效率要低得多。

    动态添加到dom中的元素对于jQuery v1.7应使用
    .on
    ,对于较旧版本应使用
    .live/.delegate

    请注意,对于旧版本,使用
    .delegate
    比使用
    .live
    更可取

    你的情况应该是

    在上使用
    (jQuery v1.7)

    对于使用
    .delegate
    ,[首选方法]的旧版本

    $('#news').delegate('.deleteItem', 'click', function () {
     //delete code
    });
    
    或使用
    .live

    $('.deleteItem').live ('click', function () {
     //delete code
    });
    

    我试过$('.deleteItem')。在('function(){…}和$('.deleteItem')。在('click',function(){…})上。在('click',function(){…})上。在('click',function>$('.deleteItem')上,两者都不起作用。嗯……试一下:
    $('deleteItem')。在('click',function(event){…}
    上,
    .on()
    的语法完全等同于
    .click()
    live
    在1.7中被弃用,请使用文档中的
    on()
    :“较旧版本的jQuery用户应优先使用
    .delegate()
    ,而不是
    .live()
    ”太好了。谢谢你,SKS。特别是你提醒我。on只在1.7中起作用。我们仍然在1.6中。是时候更新了。@ZachL我同意,我编辑了我的帖子提到了这一点。委托是首选方法。
    $('.deleteItem').live ('click', function () {
     //delete code
    });