我列出了这个脚本的几行
$("a.remove").click(function(){
var id = $(this).attr('id')
var user = $(this).attr('value')
$.ajax({
success : function(){
var url = "includes/action.php?page=access&action=remove";
var popupmessage = "Error";
$.post(url, { id: id },
function(data){
return true;
});
}
});
});
但是当我通过jQuery添加新行时,在刷新页面之前它不起作用
$("<a class=\"remove\" href=\"#\"></a>").insertAfter('#accesstable tr:last');
任何想法如何修复它?
编辑: 工作代码
$('a.remove').live('click', function(){
var id = $(this).attr('id')
var user = $(this).attr('value')
$.ajax({
success : function(){
var url = "includes/action.php?page=access&action=remove";
var popupmessage = "Error";
$.post(url, { id: id },
function(data){
return true;
});
}
});
});
答案 0 :(得分:3)
尝试:
$(document).on('click', 'a.remove', function(){
委托事件的优势在于它们可以处理来自稍后添加到文档的后代元素的事件。通过选择附加委托事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序。
答案 1 :(得分:1)
猜测(因为没有足够的代码显示确定),你的问题是你绑定了点击,然后添加了一个应该被该点击处理程序绑定的元素。它不起作用。如果与.click
绑定,它将绑定当时存在的所有匹配元素。它不会自动绑定创建的新元素。
要绑定尚未创建的元素,请在具有选择器的父元素上使用.on
。
答案 2 :(得分:0)
jQuery忽略动态添加内容的监听器,使用jQuery的live
$("a[class='remove']").live('click', function(){});
编辑: live已弃用,请使用 on 的解决方案
答案 3 :(得分:0)
如果您的意思是新添加的锚标记没有调用您已声明的相同点击事件,那是因为您使用的是.click()函数。这只会将click事件添加到当前页面中匹配的元素。
您应该查看使用live()事件,因为这将
为与当前匹配的所有元素附加事件处理程序 选择器,现在和将来。
所以你可以改为:
$("a.remove").live('click', function(){ .. });
修改强>
不推荐使用Live(),现在应该使用on()函数。
答案 4 :(得分:-1)
.live不推荐使用:
$(document).on('click', 'a.remove', function(){..});