$("#btnCon").click(function() {
$('#con').slideToggle('slow');
$('.tgg:not(#con)').hide();
});
このコードをhtmlの先頭に配置すると、機能しません。
体内で-それは機能します。
別のファイルで-それは機能しません。
秘密はどこにありますか?
それを頭の中で機能させるには、これを行います:
$(function(){
$("#btnCon").click(function() {
$('#con').slideToggle('slow');
$('.tgg:not(#con)').hide();
});
});
btnCon
問題は、準備が整う前にidを持つ要素を探していたことです。通常の解決策は、DOMの準備ができたときにjQueryが呼び出すこのコールバックにコードを埋め込むことです。
ただし、$(function(){ ... });
常に使用することをお勧めしますが、ベストプラクティスは、通常、コードを次のいずれかに配置することです。
このコードをhtmlの先頭に配置すると、機能しません。体内で-それは機能します。別のファイルで-それは機能しません。
script
ファイルを含むタグを本文の最後、終了タグの直前に配置すると、別のファイルで機能します</body>
。
それが機能しない理由は、それがにあるときhead
、コードはすぐに実行され、要素はまだ存在しないため、ハンドラーが接続されないためです。
ここでの正しい答えはscript
、コードのタグを最後に配置することです。これは、YUIチームとGoogleクロージャライブラリチームによって提唱されているものです。また、これにjQueryのready
イベントを使用し、スクリプトを挿入している人もいます。これは機能しますが、タグの移動先head
を制御する場合は、これを行う必要はありません。script
つまり、要するに:
これは機能します:
<body>
...content...
<script>
/* ...code... */
</script>
</body>
そしてこれは機能します:
<body>
...content...
<script src="/the/script/file.js"></script>
</body>
そしてこれは機能します:
<head>
...
<script>
jQuery(function($) { // <== This is a shortcut for `ready`
/* ...code...*/
});
</script>
</head>
<body>
...content...
</body>
これは、スクリプトファイルのコードがハンドラー内にある場合に機能します。ready
<head>
...
<script src="/the/script/file.js"></script>
</head>
<body>
...content...
</body>
document.readyでお試しください
$(document).ready(function () {
$("#btnCon").click(function() {
$('#con').slideToggle('slow');
$('.tgg:not(#con)').hide();
});
});
速記-
$(function () {
$("#btnCon").click(function() {
$('#con').slideToggle('slow');
$('.tgg:not(#con)').hide();
});
});