Jquery 我是否需要将application.js中的每个Javascript函数包装在$(function(){}中?
我的Jquery 我是否需要将application.js中的每个Javascript函数包装在$(function(){}中?,jquery,ruby-on-rails-3,Jquery,Ruby On Rails 3,我的application.js外部有这样一个功能: $(function() { // My functions are in here, and some of them even work. } 我剪切和粘贴直到我得到了一些有用的东西,现在我正在认真学习jQuery。我知道有点落后 上面的代码,$(function(){})的目的是什么?它是: 这意味着,一旦DOM完全加载,脚本将运行。这意味着脚本中依赖于某些现有DOM节点的任何部分都将正常工作。如果页面顶部有.js文件,它将在
application.js
外部有这样一个功能:
$(function() {
// My functions are in here, and some of them even work.
}
我剪切和粘贴直到我得到了一些有用的东西,现在我正在认真学习jQuery。我知道有点落后
上面的代码,$(function(){}
)的目的是什么?它是:
这意味着,一旦DOM完全加载,脚本将运行。这意味着脚本中依赖于某些现有DOM节点的任何部分都将正常工作。如果页面顶部有.js文件,它将在DOM节点存在之前执行,这意味着您将尝试处理一些不存在的内容。$(document).ready()
允许您推迟代码的执行,直到页面准备就绪
例如,假设您在头部的脚本标记中加载了以下JavaScript:
$('a').click(function () {
alert("You can't leave!!!");
return false;
});
它尝试向所有
标记添加一个单击处理程序,但还没有任何
标记,因此它不会执行任何操作。如果将其包装在$(document).ready()
中,它看起来如下所示:
$(document).ready(function () {
$('a').click(function () {
alert("You can't leave!!!");
return false;
});
});
现在,它将仅在文档准备就绪时执行
要回答标题中的问题,不,您不必将所有内容都包装在
$(document).ready()
-只需将依赖于DOM的代码完全加载。不,您只需要在$(function(){})中首次加载页面时执行那些语句;
所有函数都可以在其他地方定义。基本上是在加载主体时运行代码时所做的 让我再详细解释一下 当页面加载时,浏览器从第一行加载到最后一行,当您在
标记中加载jQuery时,由于
位于主体上方,因此在
之前加载
举个例子:
<!DOCTYPE html>
<html>
<head>
<script type="x" source="jquery.js" />
<script type="x">
$("#my_id").remove();
</script>
</head>
<body>
<div id="my_id"></div>
</body>
</html>
写这篇文章有几种方法,主要方法如下:
$(document).ready(function(){
//Code here will only be run upon document ready.
});
但我更喜欢这样做:
mysite = {}; //Creates a "namespace / Object" for me to work within
mysite.dialog = function(title,message){/*blah*/}
mysite.init = function(){
//Code here is for the Document Ready state.
mysite.dialog("hey","the document has been loaded");
}
然后我将其存储在我的Application.js
文件中,并在jquery.js
然后在我的文档中,运行以下命令
$(document).ready(mysite.init);
像白天一样清晰。非常感谢!@AKWF没问题-很乐意帮助:)我喜欢罗伯特。我感谢你花这么多时间回答我的问题。谢谢!所以听起来所有绑定到特定动态项目的绑定都需要在里面。谢谢迈克。
mysite = {}; //Creates a "namespace / Object" for me to work within
mysite.dialog = function(title,message){/*blah*/}
mysite.init = function(){
//Code here is for the Document Ready state.
mysite.dialog("hey","the document has been loaded");
}
$(document).ready(mysite.init);