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

jquery没有响应简单的.click()命令-怎么了?

  •  1
  • rhodesjason  · 技术社区  · 16 年前

    我正在使用jquery动态地向Web表单添加表单元素。用户可以通过单击按钮/链接“添加时段”到其请求表单。单击后,我将使用.after()向表单表以及标签和字段添加另外两行。

    附加代码中的最后一列是一个表示“删除”的链接。

    $(document).ready(function() {
        var i=2;
        $("#add_time_slot").click(function() {
            $("#time_slot_table tr:last").after('<tr"><td ... etc ... </tr><tr> ... etc ...<td><a class="removeslot" href="#">Remove</a></td></tr>');
            i++;
    
            return false;
        });
    }); 
    

    里面有很多HTML代码,所以我把普通的东西拿出来保持干净。没有什么特别奇怪的地方…等。。。是。

    到目前为止,一切都很好。效果很好。但是,当单击“删除”链接时,我将使用以下代码作为开始:

    $("a.removeslot").click(function() {
        alert("It worked!");
        return false;
    });
    

    这行不通。如果相反,我把 $("#header a") 用同样的代码,代替 $("a.removeslot") ,它工作正常,当我单击标题中的任何链接时,它返回false并运行警报。但是当它是a.removeslot时,它总是转到“”URL(不返回false),并且从不运行警报。

    这看起来很基本,让我胃痛。密码怎么了??

    谢谢。

    3 回复  |  直到 16 年前
        1
  •  6
  •   Bartek    16 年前

    你需要使用 live() 如果在页面加载后动态添加了removeslot链接。所以,这样写:

    $("a.removeslost").live("click", function() {
      ...
    }):
    

    更多信息: http://docs.jquery.com/Events/live

        2
  •  0
  •   Soufiane Hassou    16 年前

    这是因为您的链接是在页面加载后添加的,而在事件“已分配”时不存在,您应该使用 JQuery live events .

        3
  •  0
  •   jordelver    16 年前

    我不是jquery专家,但我认为这是因为动态添加表行后需要重新应用事件处理程序,因为jquery在第一次声明事件处理程序时不知道新行。我试着写一篇 explanation of this on my blog 可能会有所帮助。