回答

收藏

动态创建的元素上的事件绑定?

技术问答 技术问答 217 人阅读 | 0 人回复 | 2023-09-12

我有一些代码,我循环浏览页面上的所有选择框,并将.hover将事件绑定到它们,以调整它们的宽度mouse on/off。! U3 x3 G! T0 w& U$ i
这发生在页面准备好并且工作正常。4 B& I9 [" p; R9 i0 ~: i0 X
我遇到的问题是,我在初始循环后通过 Ajax 或 DOM 添加的任何选择框都不会绑定事件。% ?! ^) T) w1 z5 u  e7 p6 w0 i
我找到了这个插件(jQuery Live Query Plugin),但是在我的页面上我的页面添加另一个 5k 之前,我想看看是否有人知道直接使用 的方法来做到这一点jQuery 通过其他选项。# o7 S5 E# x! U
                                                               
, s& o  ^/ M7 a$ b  C/ Y    解决方案:                                                               
! O9 G; a' E! b) f                                                                从 jQuery 1.7 开始,您应该jQuery.fn.on在填充选择器参数时使用:" f4 C9 A" ~( S7 s: }8 x/ u

    6 X0 i8 o7 o0 [8 d3 P0 }
  • $(staticAncestors).on(eventName,dynamicChild,function() {}code]解释:
    8 w( H' t( P3 r3 o( ]
  • 这就是所谓的事件委托,其工作原理如下。事件附加到事件中。staticAncestors静态父级 ( )应处理元素。每次在这个元素或后代元素之一上触发事件,都会触发这个 jQuery 处理程序。然后检查触发事件的元素是否与您的选择器 ( dynamicChild)匹配。您的自定义处理程序函数将在匹配时执行。
    ; k! x. ^1 f5 Q; v; h" v& e
  • 在此之前,使用推荐方法live():6 [! i. _/ b! t, o3 B1 ^
  • [code]$(selector).live( eventName,function(){} )code]然而,live()在 1.7 中被弃用on(),而在 1.9 被完全删除。live()签名:, N( v4 i. h8 \* V
  • [code]$(selector).live( eventName,function(){} )code]… 可以替换为以下on()签名:
    ! W% S( L* k+ Z6 w
  • [code]$(document).on( eventName,selector,function(){} )code]例如,如果您的页面使用类名动态创建元素,dosomething您将事件绑定到已存在的父级(这是这里问题的核心,你需要绑定到存在的东西,而不是动态内容),可以(也是最简单的选择)document. 尽管记住document可能不是最有效的选择。
    " y( o7 X' H, I; u  _
  • [code]$(document).on('mouseover mouseout','.dosomething',function()()()()()(///)()()()()()(()()()()()())()()(////)())()()()())()()()///////)()()()())())()())()())())()()()()()()()())()()()()()()())()()()())()()()()()()())()()())()()()())()()()()()()()()()()()()//////)/)/)/)()()()()()()()()()()())()())())())()())()())()())()())()())()()())()())()()()()()())()))()))()))()())())())())()()()())()))()))())())()))()()))()()()))()()()))())())()))())()()())())()))())))))())))()()))())))())))()))()())()())()))()))()()()()()))())))))())())()()()()()))))()))())))))()))))()))())()()))))())()()()()()()()())()))()////////)))))))))))))()))))))))()))))))()()()()()()()())))what you want to happen when mouseover and mouseout     / occurs on elements that match '.dosomething();code]任何父级都可以存在于事件绑定中。[code]$('.buttons').on('click','button',function()()()()()(///)()()()()()(()()()()()())()()(////)())()()()())()()()///////)()()()())())()())()())())()()()()()()()())()()()()()()())()()()())()()()()()()())()()())()()()())()()()()()()()()()()()()//////)/)/)/)()()()()()()()()()()())()())())())()())()())()())()())()())()()())()())()()()()()())()))()))()))()())())())())()()()())()))()))())())()))()()))()()()))()()()))())())()))())()()())())()))())))))())))()()))())))())))()))()())()())()))()))()()()()()))())))))())())()()()()()))))()))())))))()))))()))())()()))))())()()()()()()()())()))()////////)))))))))))))()))))))))()))))))()()()()()()()())))do something here});
    - q9 y# ?" A* }- L% i* R
将适用于2 o# N+ G7 [1 e+ O9 \! z$ T
        4 _0 e- k& O& ^3 O; {
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则