如何获取jquery on()来处理尚未存在的元素

时间:2013-05-21 01:41:00

标签: jquery

我总是使用delegate()将事件绑定到最初加载DOM时不存在的元素。我理解on()应该替换委托,但是我不明白jquery网站上的文档我将如何将以下代码翻译成on()

$(document).delegate(
            ".Course_Name, .Start_Date, .Book_Title, .Book_Author, .Book_Isbn",
                "click",
                function()
                {
                    var whichButton = $(this).attr("class");
                    make_table(whichButton);
                    fillISBN();
                });

2 个答案:

答案 0 :(得分:4)

$(document).on("click",
            ".Course_Name, .Start_Date, .Book_Title, .Book_Author, .Book_Isbn",
                function()
                {
                    var whichButton = $(this).attr("class");
                    make_table(whichButton);
                    fillISBN();
                });

不太难,是吗?

现在的内部.delegate只是对.on的引用。 .delegate实现为

function (selector, types, data, fn) {
    return this.on(types, selector, data, fn);
}

答案 1 :(得分:2)

Benamin告诉你该怎么做。以下是为什么的解释。

基本上,原则是不是将侦听器直接附加到选择器,而是将其附加到选择器的某个父对象,并利用事件冒泡。很多人对bodydocument执行此操作,因为所有对象都位于其下方。因此,您将事件侦听器附加到DOM中的某个高级对象,以便您要处理的所有当前和未来元素都在其中,并且单击事件会冒泡到该对象。然后.on()的第二个参数是选择器,其作用类似于过滤器。

所以IOW而不是:

.delegate() - 将侦听器附加到此选择器的实例...然后基本上继续寻找这些实例(这是性能下降)。订单是选择>连接。

你有

.on() - 将一个侦听器附加到这个高级别事物上,然后仅对与选择器匹配的子元素(增强的性能)执行操作。这有效地使它适用于未来的元素,因为更高级别的对象始终存在,而这就是事件附加到的对象。订单是附件>选择。性能提升是因为使用此方法,jQuery不必继续查找将事件附加到的选择器的新实例。