0

I have always used delegate() to bind events to elements which don't exist when the DOM is initially loaded. I understand that on() is supposed to replace delegate, but I don't understand the documentation on the jquery site how exactly I would translate the following code to use with on()

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

2 回答 2

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

不太难,是吗?

在内部,nowdays.delegate只是对.on. .delegate被实现为

function (selector, types, data, fn) {
    return this.on(types, selector, data, fn);
}
于 2013-05-21T01:42:10.193 回答
2

Benamin 向您展示了该怎么做。这里解释一下为什么

基本上,原则是不将侦听器直接附加到选择器,而是将其附加到选择器的某个父对象,并利用事件冒泡。很多人这样做是为了bodydocument因为所有物体都在它们下面。因此,您将事件侦听器附加到 DOM 中的某个高级对象,您要对其执行的所有当前和将来的元素都在该对象下,并且单击事件会冒泡到该对象。然后第二个参数.on()是选择器,它就像一个过滤器。

所以 IOW 而不是:

.delegate()- 将侦听器附加到此选择器的当前实例......然后基本上继续寻找这些实例(这会降低性能)。顺序是选择 > 附加。

你有

.on()- 将单个侦听器附加到这一高级事物,然后仅作用于与选择器匹配的子元素(提高性能)。这有效地使其适用于未来的元素,因为更高级别的对象曾经/一直存在,这就是事件所附加的内容。顺序是附加 > 选择。提高的性能是因为使用这种方法,jQuery 不必一直寻找选择器的新实例来附加事件。

于 2013-05-21T01:54:06.170 回答