关于Jquery ready事件块,文档说:
.ready()方法通常与属性不兼容。如果必须使用load,则不要使用.ready()或使用jQuery的.load()方法将加载事件处理程序附加到窗口或更具体的项目,如图像。
和这个
$(function() {
// Handler for .ready() called.
});
在我的Rails的coffeescript文件中,我倾向于遵循这种模式:
$ ->
$("body.controller_name").ready ->
$(".button_group").change (evt) ->
alert("do something")
如果我需要为将要创建的元素委托绑定并且不在初始html中,我倾向于这样做。
$ ->
$("body.controller_name").ready ->
$('.button_group').change (evt) ->
alert("do something")
$(document).on 'change', '.button_group', (event) ->
alert("do something")
当检查turbolinks.jquery gem时,我遇到了这个注释:
/* BAD: don't bind 'document' events while inside $()! */
$(function() {
$(document).on('click', 'button', function() { ... })
});
所以它让我感到疑惑,我一直在做错吗?
我应该避免在就绪块中使用$(document).on()
吗?
如果是这样,除了与turbolinks.jquery可能发生冲突之外,还有一个原因是为什么这是错误的?
那么正确的模式是什么?我熟悉使用加载块而不是ready块来等待资源加载,但我不确定我是否知道我一直在做错的事情。
答案 0 :(得分:0)
是的,没有。
如果您需要,我没有理由在ready
事件中避免文档级别的绑定事件。
但是,如果可以提供帮助,则应避免在文档级别绑定委托。您应该使用尽可能接近发生事件的元素的元素。每当事件发生在绑定它的元素内部时,它必须检查事件发生的元素是否与选择器匹配,因此如果在文档级别绑定委托,则必须对任何地方发生的每个此类事件进行该工作。在页面中。
live
方法确实绑定了文档级别的委托,现在该方法已从jQuery中删除并替换为delegate
方法(现在由on
方法替换) ,因为你通常应该在较小的范围内绑定委托。
文档中的引用并未讨论您在ready
事件中执行的操作,而是讨论<body onload="">
属性。在jQuery中使用ready
或load
事件时,不应该使用它。