javascript - super 简单的 JQuery 问题让我很困惑。代码不会在 <head> 中触发,但会在 <body> 中触发

标签 javascript jquery

以前从未见过这个。这么简单的事情我做错了。

我的 JQuery 代码刚刚停止在 head 标签中工作,现在只能在 body 中工作。

这会起作用:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>

<body>

<div id="foo">
  Click Me
</div>

<script type="application/javascript">
$('#foo').click(function(){
  alert("I got here");
});
</script>

</body>
</html>

这不会:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<script type="application/javascript">
$('#foo').click(function(){
  alert("I got here");
});
</script>

</head>

<body>

<div id="foo">
  Click Me
</div>

</body>
</html>

有点迷茫。我没有看到错字。非常感谢您的建议!

最佳答案

问题是您的代码在元素存在之前运行,所以$("#foo")没有找到它。

除非您使用 async or defer attributes ,你的代码 script标记在 HTML 中遇到时 运行。所以:

<script>/* your code here */</script>
<div id="foo">..</div>

...将找不到 #foo元素,因为它还不存在。

如果你有

<div id="foo">..</div>
<script>/* your code here */</script>

...该元素存在并且您的代码可以找到它。

你有三个选择:

  1. 使用事件委托(delegate),将事件挂接到 document 上但仅当事件经过 #foo 时才响应它冒泡阶段的元素。示例:

    $(document).on("click", "#foo", function() {
        // Do something
    });
    

    这很好用,除非有其他东西可以处理 document 的后代元素上的事件。并防止它冒泡。

  2. 将脚本放在它在 HTML 中引用的元素下方。这是 vastly preferred . script 上方 标记中定义的任何元素标签将在您的脚本运行时存在。所以通常的建议是把 script就在收盘前 </body>标签。

  3. 如果您不控制 script 的位置元素去,使用 jQuery 的 ready function .

    $(document).ready(function() {
        // Your code here
    });
    

    或快捷方式:

    $(function() {
        // Your code here
    });
    

关于javascript - super 简单的 JQuery 问题让我很困惑。代码不会在 <head> 中触发,但会在 <body> 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24591048/

相关文章:

javascript - 对象方法内的 cancelAnimationFrame 不起作用

javascript - NativeScript 中的自定义对话框

javascript - 尝试使用 api/oEmbed 从 Vimeo 上的剪辑获取数据时出现 CORS 问题

javascript - 如何在 Electron 中为 OSX 打包自定义图标

javascript - 使用带有固定 Div 的 scrollTop 进行动画处理

php - 如何从 MySQL/jQuery ajax 调用中清空 GET 值

javascript - ajax文件下载 : progress event, 进行下载

javascript - iframe 内容并不总是加载

javascript - JS/jQuery可以与音频交互吗?

JavaScript 数组操作删除奇数数组元素