質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

4033閲覧

都道府県・市町村の連動セレクトメニューについて

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/09/01 02:13

編集2017/09/01 05:30

###前提・実現したいこと
フォームで都道府県を選択すると、その都道府県に応じた市町村を選べる連動セレクトメニューを作成しています。
こちらのURL( http://jsdo.it/ksk1015/tSJ7 )のjavaScriptを参考に設定いたしました。
動作自体は良好です。
「都道府県」を選択する際に、最初から「東京都」が選択された状態にして、連動する「市町村」が表示された状態にしたい思っているのですがうまくいきません。
どのように設定したら良いでしょうか?

###該当のソースコード

/ 引数のエリアコードの子地域情報を取ってくる function fetchChildrenArea(ac, success, error){ // apiの設定情報 // http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/addressdirectory.html var api = { url: "http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/addressDirectory", appid: "dj0zaiZpPWdJZ0p0VnU2ZkdWdSZkPVlXazljM05IY1ROSE4yY21jR285TUEtLSZzPWNvbnN1bWVyc2VjcmV0Jng9OGM-" }; var that = this; // キャッシュあればキャッシュを使用 that.cache = that.cache || {}; if( that.cache[ac] ){ success && success(that.cache[ac]); return; } $.ajax({ url: api.url, data: { appid: api.appid, ac: ac, mode: "2", // 1:甲良町(犬上郡), 2: 犬上郡甲良町 output: "json" }, dataType: "jsonp" }).done(function(json){ var data, props, i, ii; if(json.error){ error && error(); return; } // jsonデータから子地域データを取得 data = json; props = ["Feature", "0", "Property", "AddressDirectory"]; while(data && props.length){ data = data[props.shift()]; } if(!data || !data.length){ error && error(); return; } i = 0, ii = data.length; while(i < ii){ data[i] = { ac: data[i]["AreaCode"], name: data[i]["Name"] }; i++; } that.cache[ac] = data; success && success(data); }).fail(function(){ error && error(); }); } var $selects = $("select"); var setSelectOptions = function($select, data){ var i, ii, options = []; options.push("<option value=''>" + $select.attr("data-label") + "</option>"); if(data){ for(i = 0, ii = data.length; i < ii; i++){ options.push("<option data-ac='" + data[i].ac + "' value='" + data[i].name + "'>" + data[i].name + "</option>"); } } options.length === 1? $select.hide() : $select.show(); $select.html(options.join("")); }; $selects.eq(0).change(function(){ var ac = $(this).find(":selected").attr("data-ac"); if(ac){ fetchChildrenArea(ac, function(data){ setSelectOptions($selects.eq(1), data); }); }else{ setSelectOptions($selects.eq(1)); } setSelectOptions($selects.eq(2)); }); $selects.eq(1).change(function(){ var ac = $(this).find(":selected").attr("data-ac"); if(ac){ fetchChildrenArea(ac, function(data){ setSelectOptions($selects.eq(2), data); }); }else{ setSelectOptions($selects.eq(2)); } }); fetchChildrenArea("JP", function(data){ setSelectOptions($selects.eq(0), data); setSelectOptions($selects.eq(1)); setSelectOptions($selects.eq(2)); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/09/01 02:45 編集

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
退会済みユーザー

退会済みユーザー

2017/09/01 05:28

ご指摘ありがとうございます。修正いたしました。
guest

回答2

0

セレクトメニューでデフォールトにするという事は、HTMLのSelectブロックに含まれる特定の都道府県のOptionにselected属性をつけたいのでしょう。

だとすれば、selectブロックを作り出している質問のコードの下記部分

var $selects = $("select"); var setSelectOptions = function($select, data){ var i, ii, options = []; options.push("<option value=''>" + $select.attr("data-label") + "</option>"); if(data){ for(i = 0, ii = data.length; i < ii; i++){ options.push("<option data-ac='" + data[i].ac + "' value='" + data[i].name + "'>" + data[i].name + "</option>"); } }

を以下のような感じに変更すれば良いのではないでしょうか。

var $selects = $("select"); var setSelectOptions = function($select, data){ var i, ii, options = []; options.push("<option value=''>" + $select.attr("data-label") + "</option>"); if(data){ for(i = 0, ii = data.length; i < ii; i++){ if(data[i].name == "東京都"){ // 東京都だったら、selectedのついたoptionを使う。 options.push("<option data-ac='" + data[i].ac + "' value='" + data[i].name + " selected '>" + data[i].name + "</option>"); } else { // 他は、selectedのついていないoptionを使う。 options.push("<option data-ac='" + data[i].ac + "' value='" + data[i].name + "'>" + data[i].name + "</option>"); } } }

data[i].nameが特定の都道府県(あるいは地名)の場合は、selectedがついたoptionを使うようにするというIFを付け加えただけです。

投稿2017/09/01 03:00

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/09/01 05:30

ご回答ありがとうございます!…ですが、うまくいきませんでした。質問がわかりにくかったかもしれませんが、最初から「東京」が選択された状態で、かつ連動する市町村が表示されるようにしたいです。
guest

0

ベストアンサー

JavaScript

1fetchChildrenArea("JP", function(data){ 2 setSelectOptions($selects.eq(0), data); 3 /* ここで「東京」を選択(リンクを参照) */ 4 $selects.change(); 5 setSelectOptions($selects.eq(1)); 6 setSelectOptions($selects.eq(2)); 7});

【jQuery でセレクトボックスの value 値/テキストを選択/設定/取得する方法】
https://jquery.nj-clucker.com/select-set-get/

投稿2017/09/01 17:30

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問