用jquery将函数注册到DOM

registering functions to DOM ready with jquery

本文关键字:DOM 注册 函数 jquery      更新时间:2023-09-26

说我添加到First.js:

$(document).ready(
function () {
    dosomething A
    });
function () {
    dosomething C
    });
});

和Second.js:

$(document).ready(
function () {
    dosomething B
    });
});

DOM准备好后将执行所有3个函数吗?

当我注册

时,会发生什么情况?First.js

:

$(document).ready(
A = function () {
    dosomething A
    });
C = function () {
    dosomething C
    });
});
Second.js

:

$(document).ready(
A = function () {
    dosomething A
    });
});

后一个将覆盖第一个?

TIA

您的第一个示例语法无效。它将导致javascript解释器抛出异常。你只需要传递一个函数给$(document).ready(fn)。您可以在一个函数中包含多个函数调用,但是您只能将一个函数传递给.ready()

第二个例子也是一个语法错误——一个额外的});。如果删除它,它将工作并执行该函数。

您在first.jssecond.js中的第三个示例也是语法错误。您不能将任意javascript作为.ready()的参数。它必须是一个语法正确的函数引用。

现在,您可能一直试图问您是否在示例中实际提供了合法语法,您传递给.ready(fn)的所有函数将在文档准备好时执行。jQuery保存了所有传递的函数的数组,并在文档准备好时执行它们。如果使用多个函数多次调用.ready(),则.ready()的jQuery文档没有指定调用顺序,不过可以检查源代码并查看可能的顺序。

" DOM准备好后,是否会执行所有3个函数?"

是的。每次绑定要在DomReady执行的内容时,jQuery都会将该函数放入一个内部数组中,然后按照"插入"的顺序执行它们。

后一个将覆盖第一个?

是的,它会,除非你把var放在定义之前。JavaScript将把A放在窗口作用域中,所以下一个定义将覆盖第一个定义。

function() {
    var A = 0; // this will only exist within the function
}
function() {
    A = 1; // this will be added to the "global" scope (window).
}

后一个将覆盖第一个?

不,您可以为单个事件分配多个函数。

我假设你的语法错误是无意的。按照它们的编写方式,不执行任何代码。

是的,您可以多次绑定同一个事件而不会出现问题。

是,第二个代码将替换第一个代码设置的值