【发布时间】:2012-08-05 02:34:22
【问题描述】:
在过去,我曾经成功地将电话链接到live(),例如:
$(".something")
.live("click", function(e) { ... })
.live("change", function(e) { ... })
.live("submit", function(e) { ... });
如今,live()、bind() 和 delegate() 已被闪亮的新 on() 取代。
我尝试用 on() 简单地替换 live(),这似乎很明显:
$(".something")
.on("click", function(e) { ... })
.on("change", function(e) { ... })
.on("submit", function(e) { ... });
但是,当您考虑 on() 的工作原理时,这几乎同样明显行不通。来自http://api.jquery.com/on/:
“事件处理程序仅绑定到当前选定的元素;它们必须在您的代码调用 .on() 时存在于页面上。”
根据 jQuery 文档,我需要绑定到 document 并委托给 .something 来处理实时事件。不幸的是,这意味着如果我想用on() 复制上面的内容,我最终会重复我的委托选择器(.document):
$(document)
.on("click", ".something", function(e) { ... })
.on("change", ".something", function(e) { ... })
.on("submit", ".something", function(e) { ... });
这按预期工作,但我真的很希望能够像使用live() 那样更清晰地进行链接。我错过了什么吗?
【问题讨论】:
-
我相信 DELEGATE 取代了 LIVE,而 ON 只是正常赛事的“面具”。
-
来自 jQuery 文档:“从 jQuery 1.7 开始,.on() 方法提供了附加事件处理程序所需的所有功能。”所以它确实使 live()、bind() 和 delegate() 变得多余。
-
为什么投反对票?这对我来说似乎是个好问题。
-
jQuery API 提供的
click()、change()和submit()函数有什么问题? -
@mariusnn,他们不是“活的”
标签: jquery