
こんにちは、JavaScriptでプルダウンメニューを作ろうとして
cssで予めdisplay:none;を指定したところ、
メニューがクリックしても開かなくなってしまいました。
html、css、JavaScriptの記述は以下の通りです。
html
---------------------------------------
<span onclick="PullDown('term1')">クリック</span>
<div id="term1">
<ul>
<li>***********</li>
<li>***********</li>
</ul>
</div>
-----------------------------
css
------------------------------
div#term1 {
display: none;
}
-------------------------------
JavaScript
-------------------------------
function PullDown(id){
if(document.getElementById(id).style.display == 'none')
document.getElementById(id).style.display='';
else
document.getElementById(id).style.display='none';
}
---------------------------------
cssの記述部分を無くすとちゃんと開いたり閉じたりと動作します。
また、
function Init(){
document.getElementById("term1").style.display="none";
}
とJavaScriptで書いて、
bodyタグの所で
<body onload="Init()">として呼び出してロード時に隠すようにするとちゃんと開閉してくれます。
cssでdisplay:none;と書くと動かなくなる理由と、
対策が分かる方居ましたら教えてください。
No.1ベストアンサー
- 回答日時:
CSSスタイルは、要素のstyleプロパティには反映されません。
なので、if(document.getElementById(id).style.display == 'none')
のところで常に偽となってしまいます。適用されているスタイルを取得するためには、別の方法が必要です。
No.5
- 回答日時:
''を設定すると「特に指定しない」ということになり、CSSの指定が適用されます。
DIV等のブロック要素(同一行に他の要素がない)なら'block'を指定してみてください。SPAN等のインライン要素(同一行に他の要素がある)なら'inline'です。ありがとうございます、blockで出来ました!
この問題は何日も分からず悩んでいたので本当に嬉しいです。
参考にHPを載せて頂いたり、無知な自分にも分かりやすいように説明して頂き本当に感謝です。
重ね重ねですが、本当にありがとうございました!
No.4
- 回答日時:
>an-goooさん
いえいえ^^
1の参考URLですが、見直してみたら我ながら分かりにくいですね・・・。currentStyleやgetComputedStyleで検索すればもっといいサイトがあると思うので探してみてください。
susie-tさん、an-goooさん共々、御解答頂きありがとうございます。
onloadで初期化した場合はJavaScriptで"none"をセットしていたので
条件式でちゃんと=="none"と判別されていてたのですね。
しかしこの場合、値をセットするにはどうしたら良いのでしょうか?
function PullDown(id){
var root=document.getElementById(id);
var dis=document.defaultView.getComputedStyle(root,"").getPropertyValue("display");
if(dis=="none")
window.alert(dis);
とすると、確かに"none"が取得出来ているようなのですが、
前述の書き方で
root.style.display='';
としても当然かもしれませんが反映されません。
No.2
- 回答日時:
cssのdisplay指定の初期値はinlineなので''ではなくinlineを指定してあげましょう。
それでも1回目は非表示→表示に変わりません。
それはdocument.getElementById(id).style.displayが''を返しているからのようです。
if(document.getElementById(id).style.display == 'none' ||document.getElementById(id).style.display == '')
document.getElementById(id).style.display='inline';
else
document.getElementById(id).style.display='none';
このようにすればうまく動くのではないでしょうか?
でも何故cssでdisplay:noneしてるにもかかわらず''が返ってくるのか・・・もうちょっと調べてみます・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- JavaScript jQueryでのレスポンシブが綺麗に動かない 3 2022/06/21 11:08
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
createElementで作成した要素を...
-
jQueryでクリックされた要素のi...
-
jqueryのhideとfadeInについて
-
removeEventListenerについて
-
背景色を透明化
-
401エラードキュメントを401.ht...
-
HTMLとJavaScriptで作ったタイ...
-
IFRAMEの表示/非表示を切り替え...
-
折りたたみタグ 他を閉じる(...
-
背景色を一定時間ごとにランダ...
-
テキストボックスに入力された...
-
html内でJavaScriptでオープン...
-
html内でJavaScriptで参照先を...
-
javascriptでpostした値が取得...
-
jqueryを@keyframesに変換2
-
クリックするとテーブルの列の...
-
クリックで色変更後に既に変更...
-
javascriptがわからない
-
jQuery の jqPlotプラグイン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
指定したパスが現URLに含まれて...
-
removeEventListenerについて
-
iframe内のリンクが飛ばないの...
-
createElementで作成した要素を...
-
IFRAMEの表示/非表示を切り替え...
-
jQueryで同じ要素の先頭へ親要...
-
ページ読み込み完了の3秒後にリ...
-
jQueryで特定id以外の下にある...
-
jQueryで同じid属性が複数あっ...
-
表示・非表示のスクリプトで、...
-
jQueryでシンプルドラッグドロ...
-
Gif画像のアニメーションが再生...
-
【HP作成】クリックすると下...
-
クリックすると下に説明文が出...
-
背景色を透明化
-
プルダウンとチェックボックス...
-
javascriptでpostした値が取得...
おすすめ情報