Javascript 没有document.ready功能不起作用

Javascript 没有document.ready功能不起作用,javascript,jquery,Javascript,Jquery,document.ready真的有必要吗。这个问题被问了无数次 此代码段与document.ready一起提供,并且工作正常 <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script> $(document).ready(funct

document.ready真的有必要吗。这个问题被问了无数次

此代码段与document.ready一起提供,并且工作正常

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("#p1").mouseenter(function(){
    alert("You entered p1!");
  });
});
</script>
</head>
<body>

<p id="p1">Enter this paragraph.</p>

</body>
</html>
它不再起作用了。但是,如果参数是鼠标输入时文档未准备好。在尝试之前我已经等了几分钟,但仍然不起作用。代码中有什么我遗漏的吗

$("#p1").mouseenter(function(){
    alert("You entered p1!");
});
是绑定到DOM元素的事件处理程序,
#p1
$(document).ready()处理程序确保在尝试执行处理程序中的任何代码之前加载所有DOM元素。如果在创建与其绑定的
mouseenter
事件处理程序时,具有
id=“p1”
的元素不存在,则无论您等待多长时间,
mouseenter
事件处理程序都不会处理任何内容

在将事件处理程序绑定到元素之前,始终确保元素存在。

代码

$("#p1").mouseenter(function(){
    alert("You entered p1!");
});
是绑定到DOM元素的事件处理程序,
#p1
$(document).ready()处理程序确保在尝试执行处理程序中的任何代码之前加载所有DOM元素。如果在创建与其绑定的
mouseenter
事件处理程序时,具有
id=“p1”
的元素不存在,则无论您等待多长时间,
mouseenter
事件处理程序都不会处理任何内容


在将事件处理程序绑定到元素之前,始终确保元素存在。

您必须了解,当读取DOM时,它会一路解释脚本。若要向尚未由浏览器加载的元素添加处理程序,请执行以下操作。浏览器将忽略它。 这里有三块巧克力:

  • 将JS代码放在document.ready函数中-您正在使用它:)
  • 将所有JS代码放在DOM的底部(就在EndBody标记之前)——这也可以稍微提高性能
  • 对脚本标记使用defer属性,这将告诉浏览器在加载DOM后应该开始执行JS代码
关于延迟属性:

您必须了解,当读取DOM时,它会一路解释您的脚本。若要向尚未由浏览器加载的元素添加处理程序,请执行以下操作。浏览器将忽略它。 这里有三块巧克力:

  • 将JS代码放在document.ready函数中-您正在使用它:)
  • 将所有JS代码放在DOM的底部(就在EndBody标记之前)——这也可以稍微提高性能
  • 对脚本标记使用defer属性,这将告诉浏览器在加载DOM后应该开始执行JS代码
关于延迟属性:

您还可以将该脚本放在
正文
标记的底部


输入此段落

$(“#p1”).mouseenter(函数(){ 警报(“您输入了p1!”); });
您还可以将该脚本放在
正文
标记的底部


输入此段落

$(“#p1”).mouseenter(函数(){ 警报(“您输入了p1!”); });
好吧,您需要知道的是,在使用任何jquery选择器之前,您的元素应该在DOM中。i、 e.如果将脚本标记放在元素下方,则不需要使用就绪事件。浏览器从上到下读取html,因此,一旦遇到脚本标记,该标记中的代码将立即执行,并开始查找放置在jquery选择器中的元素。

好的,您需要知道的是,在使用任何jquery选择器之前,您的元素应该在DOM中。i、 e.如果将脚本标记放在元素下方,则不需要使用就绪事件。浏览器从上到下读取html,因此,一旦遇到脚本标记,该标记中的代码将立即执行,并开始查找放置在jquery选择器中的元素。

您所说的“我在尝试之前已经等待了几分钟”是什么意思?你是怎么做到的?“我在尝试之前已经等了几分钟,但它仍然不起作用。”这不是它的工作方式:)当你执行这个代码时,
$(“#p1”)
DOM树还没有加载,所以没有

元素。使用DOMContentLoaded事件,您可以确保DOM加载完成后代码将立即执行。在鼠标输入时文档尚未准备就绪:您从何处获得该参数?当javascript引擎遇到代码中的那一行时,文档还没有准备好,因此它找不到
p
。在body标记结束之前将脚本添加到页面底部,它就会工作。请注意
$(document.ready()
)的另一个重要功能,它可以帮助您有效地避免全局变量。这是什么意思“我在尝试之前等了几分钟”?你是怎么做到的?“我在尝试之前等了几分钟,但它仍然不起作用。”这不是它的工作方式:)当你执行此代码时,
$(“#p1”)
DOM树尚未加载,因此没有

元素。使用DOMContentLoaded事件,您可以确保DOM加载完成后代码将立即执行。在鼠标输入时文档尚未准备就绪:您从何处获得该参数?当javascript引擎遇到代码中的那一行时,文档还没有准备好,因此它找不到
p
。在body标记结束之前将脚本添加到页面底部,它就会工作。请注意
$(document.ready()
)的另一个重要功能,它可以帮助您有效地避免全局变量。