jQuery:link失去了它的类';附加时的可点击性
以下是我的AJAX调用: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({
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
});