2010-11-19 68 views
4

我有追加密切类span标签<li>标签的jQuery的onclick不工作的附加标签

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(); 
      }); 

李后追加在UL标签我尝试通过点击关闭图标删除li标签,但事件不起作用。

您能否请任何帮助我。

回答

2

你可以直接分配click到新创建的元素:

$("#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(''); 
      } 
     }); 

,或者如果有将是其中的一些,最好使用.delegate()如所见in @Nick's answer

7

使用.delegate()这里,像这样:

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

.delegate()作品上添加一个事件处理程序#keyword(在<ul>)的监听事件冒泡......它适用于当前和新添加的.close元素在它下面。效率较低版本是这样的:

$(".close").live("click", function(){ 
    $(this).parent().remove(); 
}); 
+0

你的答案也正确,但我使用下面的代码。谢谢尼克! – Elankeeran 2010-11-19 19:14:55

+0

@Elankeeran - 你可以做到这一点......但它效率低下,为什么不把处理程序只附加一次? – 2010-11-19 19:22:42

+0

@Elankeeran - 这是一个单独的问题,你应该问这样的问题,这样可以帮助别人。 – 2010-11-19 20:23:53