Pourquoi jQuery cliquez sur ne fonctionne pas lorsqu'il est inclus dans un fichier séparé

Je suis un débutant l'apprentissage de jQuery et de développement web, donc cela peut être une question stupide, mais je ne peux pas trouver une réponse sur Google (sans doute, je ne suis pas à la recherche pour les bons mots clés). J'ai un fichier HTML simple (disons, 'test.html' chargement de jQuery, javascript externe fichier (disons, 'test.js') que j'ai écrit, et disposent d'un bouton. Par exemple,

<html>
....
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="scripts/test.js" type="text/javascript"></script>
....
<body>
<button type="button" class="button" id="my_button">test</button>
</body>
</html>

Dans 'test.js", j'ai:

$( "#my_button" ).click(function() {
    alert('test');
    return false;
});

Mais quand je clique sur le bouton, il ne fonctionne pas. Cependant, quand je mets quoi dans 'test.js " dans". test.html " comme ceci:

<html>
....
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    $( "#my_button" ).click(function() {
        alert('test');
        return false;
    });
});
</script>
....
<body>
<button type="button" class="button" id="my_button">test</button>
</body>
</html>

Il fonctionne. La première question est: quelqu'un Peut-il m'expliquer pourquoi ça marcherait quand j'ai insérer le code dans un fichier externe et de le charger? Est-ce toujours nécessaire d'envelopper jQuery avec $(function() {......} pour que cela fonctionne?

Idéalement, je ne veux pas de code javascript dans mon template HTML car il est évidemment désordre. Liés à la seconde question est: Quelle est la meilleure/le meilleur moyen de séparer le javascript/jQuery code comme ci-dessus, et pourtant le faire fonctionner dans le modèle HTML?

Je vous remercie pour votre réponse.

$(function(){}) == $(document).prêt() comme dans les dom éléments ont été chargés et il est sûr pour attacher les auditeurs.
"Ce qui est le plus propre/meilleure façon de séparer le javascript/jQuery code comme ci-dessus, et pourtant le faire fonctionner dans le modèle HTML?" Déplacer les scripts à droite avant la balise body de clôture.
Oui, vous voulez faire cela dans un fichier que vous êtes en train de faire un direct <script> lien vers la. Il y a des circonstances où vous ne l'utilisez pas, mais puisque vous êtes seulement à apprendre, s'en tenir à la mettre autour de toutes les dépendances que vous créez.
Merci à vous tous. @ThinkingSites pourriez-vous svp m'orienter vers une ressource qui explique les circonstances dans lesquelles je ne veux pas l'utiliser?
Oui, cela permettrait de retarder le chargement et l'exécution des scripts, ce qui est précisément ce dont vous avez besoin pour s'exécuter correctement. Sans le déplacer à la clôture de corps ou de liaison à l'événement ready, le script va s'exécuter avant les éléments sont en place(vous ne pouvez pas lier un événement directement pour un élément qui n'existe pas encore). En le déplaçant d'avant la balise de fermeture body peut entraîner dans votre page apparaissant pour charger plus rapidement à l'utilisateur final, car le HTML sera susceptible d'être analysé et rendu avant que le javascript est téléchargé/exécuté.

OriginalL'auteur user1330974 | 2013-07-11