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

jquery事件不识别JS添加的HTML组件?

  •  2
  • Lyon  · 技术社区  · 15 年前

    我正在使用JS将表单元素添加到HTML文档中。例如,我正在添加一个完整的 <form> 到表格单元格。如:

    <form class="add-comment"><input type="submit" /></form>
    

    我尝试使用JS根据新创建的表单中的元素来调用事件,但什么也没有发生。我应该得到一个警报箱。我做错了什么?

    $('.add-comment').submit(function() {
      alert('form submitted!');
    });
    

    谢谢。 希望我解释得足够好。

    5 回复  |  直到 15 年前
        1
  •  6
  •   Kyle Trauberman pestades    15 年前

    是否在注册提交事件处理程序后添加元素?除非使用live方法添加事件,否则需要在每个新元素之后注册事件。

    $('.add-comment').live('submit', function() {
        alert('form submitted!');
    });
    

    这将为所有选定的元素添加事件,即使这些元素是在将来添加的。

    http://api.jquery.com/live/

        2
  •  1
  •   bobince    15 年前

    新创建的元素没有附加任何事件处理程序。您必须选择它们,并在添加它们之后添加事件处理程序(例如 $('.add-comment', newparent).submit(submitfunction) )

    一般可以使用 .live(eventname, function) 为现有的添加事件处理程序 未来创造的元素。但是你不能用 .live('submit', ...) 在jquery 1.3中,由于这些事件是如何在浏览器中实现的(从技术上讲,它们不是__bubble_)。

    jquery 1.4支持 live 反对 submit (通过一个非常丑陋的黑客)。

        3
  •  1
  •   Jarrett Meyer    15 年前

    我写了一篇 rather long blog post 如果您不使用jquery 1.4,请考虑这个问题。您必须连接新添加的元素,因为它们在页面加载时不在那里。它应该能让您了解 .live() 方法。

        4
  •  1
  •   Bill Bingham    15 年前

    当然,将事件添加到元素中是常见的最坏实践。尝试了解发布/订阅样式的事件处理,它可以代替使用活动插件。

        5
  •  0
  •   John McCollum    15 年前

    Kyle是对的,您应该使用Live事件向当前和将来的DOM元素添加事件。但是,也可以在创建表单元素时添加事件:

    (jquery 1.4样式)

    $('<form>', {
        id: 'myFormID',
        name: 'myFormName'
    }).submit(function(){ alert('form submitted'); })
    .appendTo(myDiv);