javascript - 如何使用委托(delegate)事件?

标签 javascript delegates jquery

我正在使用一个事件来替换某些层中的“src”属性(<div class="total-title" src="anURL">):

$('.playOnAP').on('click',function() {
    $('#mp3-list ul li',this).each( function( index, element ) {
    $('.total-title').eq(index).attr('src', $(this).text() );
});     

它第一次工作,但不是在 Ajax 请求之后,当 $('.playOnAP')元素被替换。我猜我应该使用 Delegated Events ,但不要让自己清楚。

我试过下一个:

$('.playOnAP').on('click','#mp3-list ul li',function() {
$('.playOnAP #mp3-list ul li').on('click',function() {
$('.playOnAP #mp3-list ul li').on('click','#mp3-list ul li',function() {

但不起作用。

最佳答案

试试这个:

$(document).on('click', '.playOnAP',function() {

当使用事件委托(delegate)时,您必须将事件绑定(bind)到最初位于 DOM 中的元素。如果某些内容已被动态替换,则您无法绑定(bind)到它。

正如 Anup 深刻提到的那样,将点击事件绑定(bind)到 document 并不是绝对必要的——任何父元​​素都可以,只要它最初位于 DOM 中即可。

例如,如果 .playOnAP 是被替换的最顶层容器元素:

<div id="someDiv">
    <div class="playOnAP">
        //some stuff here
    </div>
</div>

你可以使用:

$('#someDiv').on('click', '.playOnAP', function() { //do your stuff });

不过,默认情况下,您几乎总是可以使用 $(document).on()(即使只是作为快速检查以确保一切正常,然后再缩小到最合适的范围元素)。

关于javascript - 如何使用委托(delegate)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891186/

相关文章:

javascript - 如果只有 1 个部分,则宽度​​应调整为 100%,否则将以 50% 的宽度继续

javascript - 如何使用 javascript/jquery 查找 anchor 标记的类别?

javascript - 将行添加到具有固定标题的 HTML 表格

javascript - 在 Promise 构造函数之外公开 resolve() 和 reject() 有什么缺点吗?

javascript - 隐藏后div框能否顺利重新排列,如何?

c# - 用反射拦截方法

ios - 在 iOS Xamarin Native 中设置 FSCalendarAppearance 委托(delegate)

c# - 语句 "delegates are secure"是什么意思?

javascript - jQuery 表单验证适用于 Mozilla 和 Internet Explorer,但不适用于 Chrome 或 Safari

javascript - 从 div 悬停到 UL 时保持 UL 可见