jquery后期绑定

时间:2009-12-14 18:46:39

标签: javascript jquery

我有一个代码在页面加载时绑定点击操作,它是一个链接。当我点击它时,它发送ajax请求并用jquery append()函数替换某些div中的内容。这个新内容有一个链接,我需要为它们绑定一些动作,但我不能..绑定我认为没有用,因为jquery追加不更新DOM树。我怎么能得到一个后期绑定?

7 个答案:

答案 0 :(得分:14)

有3个功能可以做到这一点:

  • $(selector).live(events, data, handler); - jQuery 1.3+ - 版本弃用:1.7,已移除:1.9 reference
  • $(document).delegate(selector, events, data, handler); - jQuery 1.4.3+ - 从jQuery 1.7开始,.delegate()已被.on()方法取代。reference)< / LI>
  • $(document).on(events, selector, data, handler); - jQuery 1.7+ - 首选(reference

通常建议使用on() ,并且它的使用很简单,可能是首选方式。

  1. 第一个选择器在调用函数时必须存在,并且可能不会被删除或事件也将消失(这可能是document)。
  2. 第一个参数是事件(例如“点击”)
  3. 第二个参数是您要将事件绑定到的选择器。
  4. 最后,您可以为活动添加一些自定义数据和功能。
  5. 以下是一些示例代码:

    // Make sure the DOM is ready
    $(function() {
        // Bind the click event to the function
        $(document).on("click", "a.class", function(event) {
            // Put your code here.
        });
    });
    

答案 1 :(得分:11)

现在可以通过使用jQuery的live()事件来获得后期绑定:

$('a.my-links-class').live('click', function() {
    // do your link action here
});

答案 2 :(得分:5)

从版本1.9开始, .live()事件已弃用

对于使用Jquery更高版本的任何人,他们可以使用 .on()事件,它的工作方式非常相似。

答案 3 :(得分:4)

.live中的方法JQuery 1.9已被弃用。现在你可以这样做:

$("body").on("click", ".classname", function() { ... })

答案 4 :(得分:2)

您需要使用jQuery的live函数,该函数将事件绑定到与选择器匹配的所有元素,无论它们何时被创建。

答案 5 :(得分:2)

您可以使用jQuery 1.3 +的$().live(event, function)函数。 $("a").live("click", myClickFunc)将绑定myClickFunc,就像$("a").click(myClickFunc)$("a").bind("click", myClickFunc)一样,但事件将被绑定为“实时”,因此在该函数调用之后添加到DOM的元素也将约束。 您可以使用$().die()删除实时绑定事件。 有关$()。live的更多信息,请参阅the documentation for it

另一种选择是使用一个函数来绑定给定某个上下文的元素(使用$ selector函数很少使用的第二个参数):

function myBindEvents(context) {
     $("a", context).click(myClickFunc);
}

并在使用AJAX更新元素时​​调用它:

$("<div>").load("...", "...", function(){myBindEvents(this);});

希望这会有所帮助。 :)

答案 6 :(得分:0)

在我的情况下,我正在使用js库,因为我有元素变量,并且代码就像

$(element).click(function(){
    //some action
});

但这不适用于我后来的绑定元素。 所以我终于使用了核心js click事件

element.addEventListener('click', function() {
    //My some action
}, false);