我有一个不寻常的JavaScript问题,我有一个javascript问题,交替拒绝工作。基本上,在第一次单击时,jquery函数按原样工作,删除表行,并重绘表行:
$(".deleteRow").click(function(e){
if(confirm("This will delete the selected week. Are you sure?")){
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_delete',
data: { page_id : $(this).attr('id') },
success: tableRedraw,
dataType: 'html'
})
};
e.preventDefault();
})
然而,如果我再次单击触发此按钮的按钮,它就不起作用。它不是通过javascript函数,而是遵循链接(为非JavaScript模式设计)。我无法理解这种不寻常的行为,我可能认为它是由于jquery源不可用(由于某种未知的原因)引起的,但是我有另一个向表中添加行的函数,可以连续多次使用,没有问题:
$("#addRow").click(function(e){
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_add',
success: tableRedraw,
dataType: 'html'
})
e.preventDefault();
})
})
任何帮助都会非常感激。
答案 0 :(得分:3)
我猜这与你的tableRedraw
方法有关。如果它实际上破坏了表并重新绘制了整个表,那么你也会破坏对jQuery托管事件处理程序的任何引用。
我猜测#addRow
继续工作的原因是它实际上并不是重新绘制的表的一部分,或者在某种程度上不会被摧毁。
我不知道您的代码要求是什么,但是为了添加/删除行(如果确实发生了什么),销毁和重绘整个表似乎是浪费。相反,仅针对需要操纵的单个行似乎更好。
答案 1 :(得分:2)
您的tableRedraw
删除了元素(带有deleteRow
类的)并重新创建它们吗?
如果是这样,你应该使用.live()
方法来绑定click事件,因为它会将它持久化为动态添加的元素..
<强>更新强>
您需要更改
$(".deleteRow").click(function(e){
到
$(".deleteRow").live('click', function(e){