什么时候在$(document)里面定义javascript函数。准备好(),你什么时候没有?
如果职能应该是全球可访问(这可能表明你的应用程序的设计不好),那么你必须定义它们的ready
处理程序之外。
仅仅是把$(document).ready()中的所有javascript代码放在里面足够安全吗?
见上文。
当你不这样做时会发生什么?
取决于您的JavaScript代码在做什么以及它的位置。最糟糕的情况是,您将会遇到运行时错误,因为您正试图在DOM元素存在之前访问它们。如果您的代码位于head
中,并且您不仅定义函数,而且已尝试访问DOM元素,则会发生这种情况。
例如,我使用通常的jQuery选择器,当您点击东西时会执行某些操作。如果你没有用document.ready包装这些有什么危害?
有没有 “伤害” 本身。如果脚本位于head
中,那么它将不起作用,因为DOM元素尚不存在。这意味着,jQuery无法找到并将处理程序绑定到它们。
但是,如果你在结束body
标记之前放置脚本,那么DOM元素将存在。
为了安全起见,只要你想访问DOM元素,将在ready
事件处理到DOM被加载后才能被调用的函数这些调用。
由于jQuery tutorial(你应该看它)已经指出:
我们什么时候使用jQuery读取或操纵文档对象模型(DOM)做
由于几乎所有的东西,我们需要确保我们开始添加事件等,只要DOM准备就绪。
要做到这一点,我们注册的文件ready事件。
$(document).ready(function() {
// do stuff when DOM is ready
});
要提供一个更完整的例子:
<html>
<head>
<!-- Assuming jQuery is loaded -->
<script>
function foo() {
// OK - because it is inside a function which is called
// at some time after the DOM was loaded
alert($('#answer').html());
}
$(function() {
// OK - because this is executed once the DOM is loaded
$('button').click(foo);
});
// OK - no DOM access/manipulation
alert('Just a random alert ' + Math.random());
// NOT OK - the element with ID `foo` does not exist yet
$('#answer').html('42');
</script>
</head>
<body>
<div id="question">The answer to life, the universe and everything</div>
<div id="answer"></div>
<button>Show the answer</button>
<script>
// OK - the element with ID `foo` does exist
$('#answer').html('42');
</script>
</body>
</html>
感谢。我想知道这是为什么我会出现一些奇怪的行为。 – Dave31415 2012-03-11 18:38:09