代码之家  ›  专栏  ›  技术社区  ›  richzilla

jquery行为不一致

  •  2
  • richzilla  · 技术社区  · 14 年前

    我有一个不寻常的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 回复  |  直到 14 年前
        1
  •  3
  •   user113716    14 年前

    我想这和你 tableRedraw 方法。如果它实际上销毁了表,并重新绘制了整个事件,那么您还销毁了对jquery托管事件处理程序的任何引用。

    我想是因为 #addRow 继续工作是,它实际上不是重新绘制的表的一部分,或者以某种方式避免被破坏。

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

        2
  •  2
  •   Gabriele Petrioli    14 年前

    是你的 tableRedraw 移除元件( deleteRow )然后重新创建它们?

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

    更新

    你需要改变

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

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