为什么我的javascript不是';不行吗?

为什么我的javascript不是';不行吗?,javascript,html,Javascript,Html,我有这个工作代码: <html> <head> <title>Bandom</title> <script src="jquery-latest.js"></script> <link href="bandom.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contain

我有这个工作代码:

<html>
<head>
    <title>Bandom</title>
    <script src="jquery-latest.js"></script>
    <link href="bandom.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="container">
    <textarea maxlength="50" id="field1"></textarea>
    <div id="field2"></div>
    <script src="bandom.js" type="text/javascript"></script>
</div>
</body>
</html>
我喜欢很多项目,在一些项目中javascript的位置并不重要,但在一些项目中它确实重要。谁能给我解释一下吗

但是,当我在head标记的开头调用我的.js文件时,javascript不起作用。为什么?

当标记中遇到
脚本
标记时,将立即运行该标记中的代码(除非在
脚本
标记上使用
延迟
异步
属性)

因此,如果
script
标记位于
head
中,并且您试图使用稍后在主体中定义的元素,那么在代码运行时它们不存在。在您的情况下,代码:

$("#field1").keyup(function() { /*...*/});
…找不到任何元素,因此无法连接任何处理程序

脚本
标记位于标记中的元素下方时(如在引用的代码中),该元素存在,因此可以找到并使用它

脚本
标记放在正文的底部,就在关闭
元素之前。如果由于某种原因不能这样做,第二种选择是使用jQuery。

更改为:

$(document).ready(function() {
    $('#field1').keyup(function () {
        var left = 50 - $(this).val().length;
        $('#field2').text('Characters left: ' + left);
    });
}

你想提供一个控制台错误吗?F12打开开发人员的控制台,答案可能就在那里。如果你准备好了JSFIDLE,更多的人会愿意看这个问题。“但是当我在开头的head标记中调用我的.js文件时……”我感到困惑。在您引用的代码中,它不在head标记的开头,而是在body中(应该在哪里)???仅供参考,“不工作”并没有告诉我们杰克。实际上什么都不喜欢。或者因为它是jquery,所以只需要用document ready函数包装它……但他会在元素出现在源代码中之后加载脚本。@WesleyMurch:是的,请看我关于这个问题的问题。(点击refresh,我在回答中也提到了这一点。)我明白了,他说只有当脚本加载到head标记中时才会出现问题。是的。希望能更容易地找到这个问题的百万个重复中的一个。回答得好,我希望我有你的耐心。我需要做点什么。哦,我刚注意到你的问题。我猜你已经明白了:/
$(document).ready(function() {
    $('#field1').keyup(function () {
        var left = 50 - $(this).val().length;
        $('#field2').text('Characters left: ' + left);
    });
}