Unable to get jQuery on() to register dynamically added content

蓝咒 提交于 2019-12-01 05:54:05

.on() essentially has two flavors: one which acts like .bind(), and another which acts like .delegate().

For your problem, you want to use the delegate version. As a reference, on signatures are like this:

// bind
$(element-selector).on(event, handler)

// delegate
$(container-selector).on(event, element-selector, handler)

The best way to get up to speed with this is probably to read up on delegate, what it is, how its used, and then apply that to on.

There are two ways to use .on(), and you're using the wrong type.

You can bind event handlers directly to elements using $('selector for elements you want the event handler bound to').on('event', function() {...});

Or, you can delegate events, by calling .on() on a wrapper element that will contain all of the dynamically added elements, such as a div or, in the worst case, the <body> element. Code would look something like this:

<div id="wrapper">
    <a href="#" class="link">Test link</a>
</div>

$('#wrapper').on('click', '.link', function(e) {
    // code to handle the click event on the link here
});

The event handler is actually handled by the <div id="wrapper"> element once the event has bubbled up to it, but the function is only called if the original target matches the selector provided. With this method, you can dynamically add additional elements with the class link to the div, and the function will also run when they're clicked on.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!