jquery onclick不适用于附加标记
我用close class span标记追加了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
标记
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()
并不是说
的最佳选择,但即使这样,你也不会注意到任何区别,除非你的页面是*非常*大和复杂的…甚至在那时也可能没有。