在jQuery中,如何将事件附加到动态html元素?

这个问题在这里已经有了答案:

  • 事件绑定动态创建的元素? 21个答案

  • 我添加了一个新的答案来反映后来的jQuery版本中的更改。 .live()方法从jQuery 1.7开始已被弃用。

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

    从jQuery 1.7开始,.live()方法已被弃用。 使用.on()附加事件处理程序。 老版本的jQuery用户应优先使用.delegate(),而不要使用.live()。

    对于jQuery 1.7+,您可以使用.on()将一个事件处理程序附加到父元素,并将与“myclass”组合的选择器作为参数传递。

    见http://api.jquery.com/on/

    所以,而不是...

    $(".myclass").click( function() {
        // do something
    });
    

    你可以写...

    $('body').on('click', 'a.myclass', function() {
        // do something
    });
    

    这将适用于所有在主体中具有'myclass'的标签,无论是否已经存在或稍后动态添加。

    这里使用的是body标签,因为这个例子没有更接近静态的周围标签,但是.on方法调用发生时存在的任何父标签都可以使用。 例如,添加动态元素的列表的ul标签将如下所示:

    $('ul').on('click', 'li', function() {
        alert( $(this).text() );
    });
    

    只要ul标签存在,这将工作(不需要li元素存在)。


    有时候做这个(顶级答案)并不总是足够的:

    $('body').on('click', 'a.myclass', function() {
        // do something
    });
    

    这可能是一个问题,因为订单事件处理程序被触发。 如果你发现自己正在做这件事,但由于它的处理顺序,它会引发问题。你可以随时把它包装到一个函数中,当被调用时“刷新”监听器。

    例如:

    function RefreshSomeEventListener() {
        // Remove handler from existing elements
        $("#wrapper .specific-selector").off(); 
    
        // Re-add event handler for all matching elements
        $("#wrapper .specific-selector").on("click", function() {
            // Handle event.
        }
    }
    

    因为它是一个函数,所以每当我以这种方式设置我的侦听器时,我通常会在文档准备就绪时调用它:

    $(document).ready(function() {
        // Other ready commands / code
    
        // Call our function to setup initial listening
        RefreshSomeEventListener();
    });
    

    然后,每当添加一些动态添加的元素时,再次调用该方法:

    function SomeMethodThatAddsElement() {
        // Some code / AJAX / whatever.. Adding element dynamically
    
        // Refresh our listener, so the new element is taken into account
        RefreshSomeEventListener();
    }
    

    希望这有助于!

    问候,


    在jQuery 1.7之后,首选的方法是.on()和.off()

    肖恩的回答显示了一个例子。

    现已过时:

    使用jQuery函数.live().die() 。 在jQuery 1.3.x中可用

    从文档:

    每当单击某个警报框时,每个段落的文本都会显示出来:

    $("p").live("click", function(){
      alert( $(this).text() );
    });
    

    此外,livequery插件可以完成此操作并支持更多事件。

    链接地址: http://www.djcxy.com/p/83645.html

    上一篇: In jQuery, how to attach events to dynamic html elements?

    下一篇: does mousedown /mouseup in jquery work for the ipad?