不一致的jquery行为

时间:2010-10-13 21:46:27

标签: jquery

我有一个不寻常的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();
              })
            })

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

我猜这与你的tableRedraw方法有关。如果它实际上破坏了表并重新绘制了整个表,那么你也会破坏对jQuery托管事件处理程序的任何引用。

我猜测#addRow继续工作的原因是它实际上并不是重新绘制的表的一部分,或者在某种程度上不会被摧毁。

我不知道您的代码要求是什么,但是为了添加/删除行(如果确实发生了什么),销毁和重绘整个表似乎是浪费。相反,仅针对需要操纵的单个行似乎更好。

答案 1 :(得分:2)

您的tableRedraw删除了元素(带有deleteRow类的)并重新创建它们吗?

如果是这样,你应该使用.live()方法来绑定click事件,因为它会将它持久化为动态添加的元素..

<强>更新

您需要更改

$(".deleteRow").click(function(e){

$(".deleteRow").live('click', function(e){