jQuery:使用委托时链接()

tri*_*anm 31 jquery

在过去,我曾经以live()极大的成功连锁电话,例如:

$(".something")
    .live("click", function(e) { ... })
    .live("change", function(e) { ... })
    .live("submit", function(e) { ... });
Run Code Online (Sandbox Code Playgroud)

这些天来,live(),bind()delegate()已被崭新的取代on().

我试着简单地更换live()on()这似乎显而易见:

$(".something")
    .on("click", function(e) { ... })
    .on("change", function(e) { ... })
    .on("submit", function(e) { ... });
Run Code Online (Sandbox Code Playgroud)

然而,当您考虑如何工作时,这几乎是显而易见的on().这来自http://api.jquery.com/on/:

"事件处理程序仅绑定到当前选定的元素;它们必须存在于代码调用.on()时页面上."

根据jQuery文档,我需要绑定document并委托.something处理实时事件.不幸的是,这意味着.document如果我想复制上面的内容,我最终会重复我的委托选择器()on():

$(document)
    .on("click", ".something", function(e) { ... })
    .on("change", ".something", function(e) { ... })
    .on("submit", ".something", function(e) { ... });
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但我真的很想能够像我使用的那样更清晰地链接live().我错过了什么吗?

nnn*_*nnn 78

我相信你可以这样做:

$(document).on({
    "click" : function(e) { ... },
    "change" : function(e) { ... },
    "submit" : function(e) { ... }
}, ".something");
Run Code Online (Sandbox Code Playgroud)

也就是说,使用"events-map"语法指定事件及其处理程序,然后指定用于委托样式行为的选择器.

  • @nnnnnn通过实际阅读我的问题并给出正确答案,感谢您成为真正有用的stackoverflow成员:) (4认同)