$(document).bind('ready', function)和$(document).ready(function(){})有什么区别?

3

我想将requirejs版本从2.0.0升级到2.1.5。

以下是代码:

define(['jquery', 'test.js'],
    function ($, test) {
    var test = new $.test({
        //options
    });
    ....
});

test.js

(function($) {
    var registerEvents = function() {
        //dosth
    };
    $.test = function(options) {
        $(document).bind('ready', function() {
            registerEvents();
        });
        ...
        return test;
    }

    ...
});

在2.0.0版本中,requirejs会一直等待所有资源下载完成才会触发dom ready事件,因此可以正常工作。详情请见https://github.com/jrburke/requirejs/issues/249
但是当我升级到requirejs 2.1.5版本后,registerEvents函数将永远不会被调用。
然而令人惊讶的是,如果我将以下内容进行更改:
$(document).bind('ready', function() {
    registerEvents();
});

To:

$(document).ready(function() {
    registerEvents();
});

它工作得很好。

所以我的问题是:它们之间有什么区别?

编辑:我正在使用jQuery v1.7.2

$(document).on('ready', function(){}) 不起作用。


1
对于那些回答说没有区别的人,你能解释一下为什么她得到了不同的结果吗?也许 requirejs 会以不同的方式处理它们,即使 jQuery 本身并没有这样做。 - Barmar
2
@mangseth:bind已经被废弃,但并未被移除 - T.J. Crowder
5
我正在使用jQuery v1.7.2。为什么?!?! - T.J. Crowder
2
区别在于,正如文档所说,“这个方法的行为类似于ready方法,但如果ready事件已经触发并且您尝试.on("ready"),绑定的处理程序将不会被执行。” - blgt
3
自jQuery 1.7版本以来,使用.on()方法附加事件处理程序到文档是首选方法。对于早期版本,则使用.bind()方法将事件处理程序直接附加到元素上。根据我现在的理解,.bind()方法并未被弃用,只是不再“首选”。 - mnsth
显示剩余8条评论
1个回答

8
区别在于,正如文档所述

还有一个$(document).on( "ready", handler ),自jQuery 1.8版本起已被弃用。它的行为类似于ready方法,但是如果ready事件已经触发并且您尝试使用.on( "ready" )绑定处理程序,则绑定的处理程序将不会被执行。以这种方式绑定的ready处理程序会在上面三种方法绑定的任何处理程序之后执行。[我的强调]

.bind.on的行为类似。
这是唯一的区别。
$( document ).ready( handler )
$().ready( handler ) // (this is not recommended)
$( handler )

并且

$( document ).on( "ready", handler )
$( document ).bind( "ready", handler )

这在文档中提到过,所以我猜这可能是你遇到问题的最可能原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接