jquery onclick不适用于附加标记

jquery onclick不适用于附加标记,jquery,append,Jquery,Append,我用close class span标记追加了标记 HTML代码 <ul id="keyword"> </ul> jquery $("#btnadd").click(function() { addkey = document.getElementById("txtaddkey").value; if(addkey!=""){ $('#keyword').append

我用close class span标记追加了
  • 标记

    HTML代码

    <ul id="keyword">
    
    </ul>
    
    jquery

    $("#btnadd").click(function() {
                    addkey = document.getElementById("txtaddkey").value;
                    if(addkey!=""){
                    $('#keyword').append('<li><span>'+addkey+'</span><span class=\"amountin\"><a href=\"#\">$0.05</a> $ <input type=\"text\" maxlength=\"5\"/></span><span class=\'close ui-icon \'></span></li>');
                    $('#txtaddkey').val('');
                    }
                });
        $(".close").click(function (){
                    $(this).parent().remove();  
                });
    
    $(“#btnadd”)。单击(函数(){
    addkey=document.getElementById(“txtaddkey”).value;
    如果(addkey!=“”){
    $('#关键字')。追加('
  • '+addkey+'$
  • '); $('#txtaddkey').val(''); } }); $(“.close”)。单击(函数(){ $(this.parent().remove(); });
    在ul标签中添加li后,我尝试通过单击关闭图标删除li标签,但事件不起作用

    你能帮我什么忙吗。

    在这里使用,像这样:

    $("#keyword").delegate(".close", "click", function (){
      $(this).parent().remove();  
    });
    
    $(".close").live("click", function (){
      $(this).parent().remove();  
    });
    
    通过在
    #关键字
    )上添加一个事件处理程序来工作,该事件处理程序侦听事件冒泡…它在当前和新添加的
    上工作。关闭它下面的
    元素。效率较低的版本如下所示:

    $("#keyword").delegate(".close", "click", function (){
      $(this).parent().remove();  
    });
    
    $(".close").live("click", function (){
      $(this).parent().remove();  
    });
    

    您可以将
    单击
    直接指定给新创建的元素:

    $("#btnadd").click(function() {
                 // Made it a local variable by using "var"
                var addkey = document.getElementById("txtaddkey").value;
                if(addkey!=""){
                    $('<li><span>'+addkey+'</span><span class=\"amountin\"><a href=\"#\">$0.05</a> $ <input type=\"text\" maxlength=\"5\"/></span><span class=\'close ui-icon \'></span></li>')
                        .find('.close').click(function (){
                            $(this).parent().remove();  
                        })
                        .end().appendTo('#keyword');
                    $('#txtaddkey').val('');
                }
            });
    
    $(“#btnadd”)。单击(函数(){
    //通过使用“var”使其成为局部变量
    var addkey=document.getElementById(“txtaddkey”).value;
    如果(addkey!=“”){
    $(“
  • ”+addkey+“$
  • ”) .find('.close')。单击(函数(){ $(this.parent().remove(); }) .end().appendTo(“#关键字”); $('#txtaddkey').val(''); } });

    或者,如果其中有几个,最好使用
    .delegate()
    ,如图所示。

    您的答案也正确,但我使用了下面的代码。谢谢你,尼克@Elankeeran-你可以这样做……但是效率要低得多,为什么不连接处理程序一次呢?@Elankeeran-这是一个单独的问题,你应该这样问,这样可以帮助他人。不敢相信我只知道了。现在请代表,谢谢!使用它的性能问题(如果有)是什么?@Adam-它只是在更高级别上侦听,因此事件(无论如何都会冒泡)会在那里被捕获。代价是侦听器正在检查通过它的所有该类型的事件。例如:再次单击与
    .close
    选择器不匹配的子项时,将检查它是否匹配
    。当事件发生时,如果它不匹配,则不会发生任何事情…但仍必须进行检查。因此,
    .delegate()
    并不是说
    的最佳选择,但即使这样,你也不会注意到任何区别,除非你的页面是*非常*大和复杂的…甚至在那时也可能没有。