クリックする度に表示/非表示が切り替わるスクリプト
Content1をクリックするとSubContentsの表示/非表示が切り替わるスクリプトを組みたいのですが、
下記スクリプトのjavascript内で表示/非表示の実現方法がよくわかりません。
調べるとStyleのVisibilityという要素(?)を指定することで表示/非表示が切り替えられる可能なのは分かったのですが、具体的にはどんなプログラムを組めばいいのか分かりません。
どなたかご教授お願いします。
<html>
<head>
<title>Template</title>
<style type="text/css">
span.content{
background-color: #FFCC66;
width: 100;
height: 20;
}
div.subcontent {
position: absolute;
top: 40px;
left: 40px;}
</style>
<script language="javascript">
function cont_pop(){
//ここをどうすれば良いでしょうか?
}
</script>
</head>
<body bgcolor=#EEEEEE>
<span id="cont1" class="content" onClick="cont_pop()">Content1</span><BR>
↓これを表示/非表示させたい
<div class="subcontent" id="scon1">
SubContents
</div>
</body>
</html>
No.6ベストアンサー
- 回答日時:
#3です。
うっかりフラグなんてつくっちゃったけど、不要でしたね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><title>test</title>
<style type="text/css">
div { width:150px; float:left; }
hr { clear:left; }
</style>
</head>
<body>
<div id="cont1">Content1</div>
<div id="cont2">Content2</div>
<hr>
<div id="scon1">SubContents1</div>
<div id="scon2">SubContents2</div>
<script type="text/javascript">
<!--
(function() {
function toggleSet(id1, id2) {
var el = document.getElementById(id1);
try { el.addEventListener('click', toggle(id2), false);
} catch(e) { el.attachEvent('onclick', toggle(id2) ); }
}
function toggle(id2) {
return function() {
var s = document.getElementById(id2).style;
s.visibility = s.visibility=='hidden'?'visible':'hidden';
}
}
toggleSet('cont1', 'scon1');
toggleSet('cont2', 'scon2');
})();
//-->
</script>
</body>
</html>
以下は関係ありません。
----------------------------------------------
回答は簡単なほうがいいと思っています。(=質問者がわかりやすい)
まぁ、あまり簡潔にすぎると、まったく理解されない場合もあるけど…
document.getElementById('cont1').onclick = function() {
var s = document.getElementById('scon1').style;
s.display = s.display=='none'?'block':'none';
}
ですんでしまうものが、長く複雑に…
それに匿名関数ではないほうが、わかりやすいかも。
ということで、なるべく努力はしますし、まとまりのある機能を一般化したようなものの場合はしているつもり。
でも、ごく簡単なものや考え方のみの場合は必要ないように感じています。(自分のお勉強とは別にして)
なので、いつもというわけにはいかないかも。
レベルの低い私に合わせてくださってありがとうございます(>_<)
この私も上のようなコードを作っていました(エラー出て悩んでましたけど^^;)
一般化すれば使いまわしも利きますし便利なんですけど、その分コードも複雑になりますよね。
でも今回のお二人の回答に載っていたコードを見てJavaScriptの書き方を割と理解できた気がします。
条件文の省略形然り、関数の使い方然り、勉強になりました。
大変感謝しています。
ありがとうございました。
No.7
- 回答日時:
>f&&func.call(that,flag);ってなにしてるの!?
if( f == true ) {
func( flag );// 引数funcが関数ならば、実行する
}
//と、似たり寄ったり。
//thatは、コールバックを利用したい時のため
var flag = true;
if( flag == true ) {
test();
}
は、
flag && test();
とも書けるよ
if( flag != true ) {
test();
}
なら
flag || test();
とも書けるよ
ほそくがないことを、だしにしてつっぱしってしまった。もうしわけない
わざわざ解説ありがとうございます。
そう、その書き方も今回babu_babooさんのコードを見て知りました(@_@;)
やはり質問する側にも最低限の知識は必要ですね・・・orz
babu_babooさんのコードは難しいですが、調べて理解できるとタメになるのでありがたいです(^_^)
そういえば先ほどのコード、
var f = 'function' === typeof func;
f && func.call( that, flag );
この2つの謎が解けたらなんとか理解できました。
たった8行に半日使ってしまった・・・笑
大変勉強になりました!
ありがとうございますm(_ _)m
No.5
- 回答日時:
fujillinさんへ。
ぷちおねがい。がっつりコードをかいてくださってありがとうございます。
とてもよいしげきになります。
もしよければ、onloadとかonclickとかではなく、ちがうものにしませんか?
それらは、かんたんにうわがきされると、きのうしなくなる。
へなちょこなコードしかかけませんが、じょうぶなコード、へんこうにつよいやつを
おたがいにせっさたくまして、かきませんか?
あぁ~これだけだと、さくじょたいしょうだな。
なので、ほそく。
var cont_pop0 = toggleSwitch( true, dispBlock( 'scon1' ) );
var cont_pop1 = toggleSwitch( false, dispBlock( 'scon2' ) );
のようにして、それぞれをよびだすとべつべつにきのうします。
ちょっと、はずいからさくじょでもいいや!
下に同じです・・・・m(_ _)m
話の途中で申し訳ないですが解決という事で閉めさせていただきます。
e.style.display = ( flag = !flag ) ? 'block': 'none';
の考え方、とても参考になりました。
今度質問する時はbabu_babooさんのソースが読めるように勉強していきたいと思います。
ありがとうございました。
No.4
- 回答日時:
ならば、ねじってみました!ぼけつをほったかんがある?!
var toggleSwitch = function ( defState, func, that ) {
defState = !!defState;
var f = 'function' === typeof func;
var result = function ( ) {
var flag = defState;
f && func.call( that, flag );
defState = !defState;
return flag;
};
return (result( defState ), result);
};
var dispBlock = function ( id ) {
var e = document.getElementById( id );
return e ? function ( flag ) {
e.style.display = flag ? 'block': 'none';
}: false;
};
var cont_pop = toggleSwitch( true, dispBlock( 'scon1' ) );
ちょっとレベル高くて私にはまだ早いようです(@_@;)
var f='function'===typeof func;ってなんで"="が3連結?
f&&func.call(that,flag);ってなにしてるの!?
と全ての行に対して言えてしまいそうなのでやめておきます・・・。
汎用性は無いにしても最初の方に出てきたコードが今の私には丁度良いようでした^^;
スマートなソースを書くにはもっと努力が必要ですね(>_<)
ありがとうございます。
No.3
- 回答日時:
>ぐろーばるへんすうのflagもいまいちだけど
ちょいとひねってみました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><title>test</title>
<style type="text/css">
body { background-color:#eeeeee; }
div.content{
background-color:#ffcc66;
width: 100px;
height: 20px;
}
</style>
<script type="text/javascript">
<!--
window.onload = function() {
document.getElementById('cont1').onclick = (function() {
var flg = true;
return function() {
document.getElementById('scon1').style.display = (flg=!flg)?'block':'none';
}
})();
}
//-->
</script>
</head>
<body>
<div id="cont1" class="content">Content1</div>
↓これを表示/非表示させたい
<div class="subcontent" id="scon1">
SubContents
</div>
</body>
</html>
読み慣れない記述の解読に難航しております(>_<)
window.onload=(function(){...})();の部分がいまいちピンときません。
onload=の先、function()を囲んでいる()はeval()と同等という記述を見つけたのですが
文字列ではないfunction(){・・・}を()しないと動かないのは何故でしょうか?
あと、その後に再び()を付けるのもよくわかりません・・・。
No.2
- 回答日時:
こういうのは?
var flag = true;
function cont_pop( ) {
var e = document.getElementById( 'scon1' );
e.style.display = ( flag = !flag ) ? 'block': 'none';
}
でも、いか、いろいろ。
<body bgcolor=#EEEEEE>
とか、
width: 100;
height: 20;
とか、
<span>
が、いきなりとうじょう!(いんらいんようそが、いきなりは・・・)
とか
ぐろーばるへんすうのflagもいまいちだけどね^^;
ソースコードが素人丸出しなのはごめんなさい(汗
これから勉強していきますm(_ _)m
>e.style.display = ( flag = !flag ) ? 'block': 'none';
参考になります、というか答えですよね^^;
条件文がその形で省略できる事も知りませんでした・・・。
直感的なコードしか書けない私にはとてもスマートに見えます。
ありがとうございました。
No.1
- 回答日時:
お礼遅れまして、すいません。
検索の仕方が下手だったんですね・・・。
styleとか部分的な情報は手に入ったのですが、
それらを繋ぎ合わせる知識が足りませんでしたm(_ _)m
とても参考になるリンクありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript 画像の表示位置 3 2022/12/23 08:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
前回の質問の続き
-
MAX関数を使ってからLEFT JOIN...
-
iframe内のリンクが飛ばないの...
-
表示・非表示のスクリプトで、...
-
getElementByIdの戻り値がnull...
-
console.log結果をhtmlで表示し...
-
javascriptテキストBOX色を元に...
-
[JavaScript]IE11にてフリック...
-
クリックする度に表示/非表示が...
-
ボタンを押せば、画面が切り替...
-
JSで動的にリンクを作成
-
jQueryで特定id以外の下にある...
-
javascriptにフェードインを追...
-
javascriptでオブジェクトの重...
-
jspでcssが読み込めない
-
1枚の画像をクリックすると複数...
-
フッター上部に謎の隙間
-
MFCで画像を表示させているので...
-
appendChildでのデフォルト値
-
【javascript】ロールオーバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
createElementで作成した要素を...
-
読み込んだQRコードをフォーム...
-
console.log結果をhtmlで表示し...
-
iframe内のリンクが飛ばないの...
-
変数内容をHTML内で表示する方法
-
getElementByIdの戻り値がnull...
-
背景色を透明化
-
自働生成される<div>タグに連番...
-
複数のリンク画像を一定時間で...
-
クリックで色変更後に既に変更...
-
removeEventListenerについて
-
IFRAMEの表示/非表示を切り替え...
-
表示・非表示のスクリプトで、...
-
タブで開いてさらにタブ内をア...
-
Jquery 親要素で順番入れ替え
-
HTML id名とjavascript変数名
-
VBScriptでXMLのデータを取得す...
-
[急ぎ] videoタグで埋め込んだm...
おすすめ情報