我是jquery和javascript的新手,只是想知道,为什么你不想对你的所有事件处理程序使用.ready()
函数?
如果用户在整个页面呈现之前向鼠标事件或键盘事件发送输入,是否会出现潜在问题?
答案 0 :(得分:3)
永远不会出现这种情况,在加载DOM时会触发jQuery文档。它不会等待加载完整的页面(包含的图像等)。在您的代码执行之前,用户能够及时做出反应来尝试触发某些内容是非常罕见的。阅读:http://api.jquery.com/ready/
具体来说,第一段:
当JavaScript提供用于执行代码的load事件时 页面呈现,此事件在所有资产之前都不会被触发 如图像已被完全接收。在大多数情况下, 只要DOM层次结构完全可以运行脚本 建造。传递给.ready()的处理程序是保证的 在DOM准备好之后执行,所以这通常是最好的地方 附加所有其他事件处理程序并运行其他jQuery代码。
所以使用$(document).ready(function(){})或等效的$(function(){})总是一个很好的做法。
编辑:为了进一步确保用户永远不会遇到问题,请确保您的脚本全部托管在您的网站旁边。例如,jQuery可以选择使用CDN。 CDN很不错,但如果用户无论出于什么原因可以访问您的网站而不是CDN,它可能会使您的网页处于无用状态。
答案 1 :(得分:1)
我相信你实际应该使用$(document).ready()
处理程序。原因是,如果您的HTML或DOM还没有完全加载,当您将事件绑定到不同的元素时,它们可能会由于尚未在页面上而失败。
我不确定是谁或者是什么告诉你不要把事件处理程序放在ready函数中,但是我认为这是一种非常常见的做法。
答案 2 :(得分:1)
在某些情况下,您不希望或无法附加事件处理程序,因为您只想在其他事件之后启用事件,或者因为通过ajax加载内容和其他信息。在大多数情况下,就绪功能是正确的位置。
答案 3 :(得分:0)
这就是为什么最佳做法是将整个代码包装在.ready()
函数中。
$(document).ready(function(){
//all event handlers here
});
如果用户向鼠标发送输入,则无法存在潜在问题 整个页面呈现之前的事件或键盘事件?
问题不是在整个页面被渲染之前。问题是当jQuery尚未加载时,然后用户尝试单击通过jQuery事件处理程序处理的内容。那么,回答你的问题;是的,那里可能存在潜在问题。
答案 4 :(得分:0)
如果用户在整个页面呈现之前向鼠标事件或键盘事件发送输入,是否会出现潜在问题? [本段]指的是不使用.ready()
的脚本
通常,如果要引用JavaScript中的元素,则必须已经解析了所讨论的元素,即添加到DOM树中。无论您是尝试附加事件处理程序(使用或不使用jQuery),更改其CSS设置或其他任何内容,这都适用。
.ready()
处理程序不等待整个页面呈现,它等待页面为JS操作“准备好”,因为它已经< em>解析并构建了整个DOM树。此时,渲染可能仍在发生,例如,图像元素的实际内容仍然只能部分下载。
但是,只要在之后的中包含的脚本块中,就可以在(或不包含).ready()
之前从JavaScript 开始操作元素。 / em>页面源中有问题的元素,因为浏览器从您的html源自上而下解析它。一个例子:
<input type="text" id="input1">
<script>
// following will work, because "input1" already exists
$("#input1").change(function() { /* do something */ });
// following will NOT work, because "input2" has not been parsed yet
$("#input2").change(function() { /* do something */ });
</script>
<input type="text" id="input2">
因此,如果由于某种原因你有一些关键的功能,你觉得你必须在 .ready()
之前设置,你可以做类似上面的事情。
另请注意,如果您将脚本包含在正文的底部,则根本不需要.ready()
函数,因为(与.ready()
一样)此时所有元素都将被删除解析。
如果它包含在.ready()
部分中,它将在解析文档的其余部分之前执行,因此您需要使用<head>
。