

ページを読み込み直さずに、selectタグの中身を切り替える方法は?
ANA(http://www.ana.co.jp)のトップページの左側にある航空券の検索フォームで、
搭乗日の「月」を変更すると、自動的に「日」のフォーム内容がその月に合ったもの
に変更されるのですが、これはどのような技術を使っているのでしょうか?
ページを読み込みなおす事無く、selectタグの中身が切り替わっています。
ソースを見ても、JavaScriptのonchangeも使っておらず、「月」を選択した際に、
まずどのように動作してるかすら分かりませんでした。
ANAと全く同じやり方でなくても構いませんので、どのようにこの処理を実現
させているのかをご教示下さい。
JavaScriptなのかその他の言語なのかも不明だったので、HTMLのカテゴリで
質問させていただきました。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
javascriptを利用して行なっていると思われます。
スクリプトが多すぎるので、ちゃんと確認してませんが、後半のほうの「renewal09/module.js」あたりに addMultiEventListener() というのがあって、イベントセット用の関数として用意されています。(他のモジュールにも似たようなものがいくつかありました)
このようなものを利用して(別のところの似たものかも知れませんが)、onchangeイベントのハンドラをセットしていると思われます。
同じモジュールの中に「ドロップダウンリストに曜日を付加するaddWeekDropDown()」、「ドロップダウンリストに値をセットするsetDropDown()」なんてのが並んでいますので、実際の処理はこのあたりを利用しているものと思われます。
実際のANAのものは、カレンダー表示とも連携するようにもなっているので、少々複雑になっています。
カレンダーは置いておいて、selectの部分だけのまがいものサンプルを作成してみましたので、ご参考まで。
(処理方法は、ご提示のサイトとは違います)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
</head>
<body>
<select id="month" style="width:5em; margin-right:2em;">
<option value="--">--</option>
</select>
<select id="day" style="width:7em;">
<option value="--">--</option>
</select>
<script type="text/javascript">
<!--
(function() {
var today = new Date(), i, e, t;
var yy =today.getFullYear(), mm = today.getMonth(), dd = today.getDate();
var week = "(日),(月),(火),(水),(木),(金),(土)".split(",");
e = document.getElementById("month");
e.options.length = 0;
for (i=0; i<12; i++) {
t = (mm+i) % 12+1;
e.options[i] = new Option(t + "月", t)
}
if(e.addEventListener) {
e.addEventListener('change', function(e){change(e)}, false);
} else if(e.attachEvent) {
e.attachEvent('onchange', function(e){change(e)});
}
daySet(mm);
function daySet(m) {
var y = yy + (m<mm?1:0), d, e = document.getElementById("day");
var lastday = new Date(y+"/"+(m+2)+"/0").getDate();
var w = new Date(y+"/"+(m+1)+"/1").getDay();
e.options.length = 0;
for (d=0; d<lastday; w=++w%7 ) e.options[d++] = new Option(d+"日"+week[w], d);
e.options[dd>lastday?lastday-1:dd-1].selected = true;
}
function change(evt) {
var t = evt.target || evt.srcElement;
dd = document.getElementById("day").value;
daySet(+t.value-1);
}
})();
//-->
</script>
</body>
</html>
具体的なソースまでご提示いただき、ありがとうございます。
addEventListenerについては、全く知りませんでした・・・。
その他も色々勉強になりました!
No.2
- 回答日時:
推測を書くのを忘れてました。
イベント処理を使って、onchangeを見張っているのだと思います。
onChangeは、オブジェクトに組み込みますが、onchangeは、待ち受け状態になったスクリプトという感じで、イベントに対応して動作します。
No.1
- 回答日時:
ANAのページには確かにonChangeはありませんが、一般的には月の部分にonChangeを使うと思います。
JavaScriptは至る所で使っているようですし、細かくは見ていませんが、日のID名をソース内で発見できなかったので、外部のスクリプトで処理してるのでしょうね。
参考URL:http://www.shurey.com/Soft/JS/form/index.html#se …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
bodyにidをつける理由は何ですか?
-
テキストボックス内にハイパー...
-
スクロールして移動を1回で終了...
-
<a href="#" …>の意味を教えて...
-
ウインドウの後ろに隠れている...
-
JavaScriptでiframeの内容を「...
-
selectタグで日付を生成
-
html メールリンクにて自動ファ...
-
innerHTMLが動作しない。
-
別ファイルのfunctionの読み込み方
-
¥マークの検索について
-
javascriptでalertの文字列をコ...
-
マウスクリックした地点のテキ...
-
window.openでフルスクリーン表...
-
JavaScript 配列とiframe
-
ボタンのID名を取得するには?
-
window.open でExcelファイルを...
-
不思議な小窓を出現させるスプ...
-
ひとつの外部ファイルに複数の...
-
キーを押している間の時間を計...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bodyにidをつける理由は何ですか?
-
ハイパーリンクに下線を表示す...
-
(Javascript)印刷するファイル...
-
リンクをクリックすると文字が...
-
テキストボックス内にハイパー...
-
bodyタグって2重にしようするこ...
-
スクロールバーのスクロール量...
-
iframeのsrcにページ内リンク(...
-
wordpressでアコーディオンメニ...
-
WEB上で編集できない、スク...
-
float したボックス内のイメー...
-
Webページ作成の際に、固定ヘッ...
-
bootstrap4 の pagination を使...
-
「overflow: hidden」ペー ジ内...
-
インラインフレーム内のスクロ...
-
"mailtoでメールの【氏名】【性...
-
複数のiframeの読み込みについて
-
bodyにwidth:100%をつける理由は?
-
CSS スクロールバーのデフォル...
-
別ページのページ内リンクでの...
おすすめ情報