2011-12-18 57 views
-1

说我添加到First.js:注册功能,DOM准备与jQuery

$(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

+2

您的示例代码中有一堆语法错误;请检查并更正它。 – Shad 2011-12-18 22:03:31

+0

例如'.ready'以__function__为参数。 – Shad 2011-12-18 22:06:42

+0

我认为这是伪代码。我认为这个问题很清楚,即使提供的例子中存在“语法错误”。 – David 2011-12-18 22:07:42

回答

2

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

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

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

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

1

后者将覆盖第一?

不,您可以为单个事件分配多个功能。

我假设你的语法错误是无意的。它们被写入的方式,没有代码被执行。

+0

我假设'不'是这个问题:“后者会覆盖第一个?”,我投了赞成票。 – 2011-12-18 22:03:34

+0

-1这是不正确的。后面的代码将会替换第一个代码所设置的值。 – Guffa 2011-12-18 22:10:08

+0

这甚至不是有效的JS,所以没有它不会。您正在对问题中不明确的代码做出假设。 – BNL 2011-12-18 22:11:14

-1

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

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

+1

为什么downvote?如果你不解释你认为是错误的,它不能改善答案。 – Guffa 2011-12-18 23:29:29

2

“在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). 
}