• 締切済み

change イベント

現在検索フォームを作成しており、セレクトボックスのchengeイベントにわからないとこがあり質問させていただきました。 ソース <select name="pref" id="pref"> <option value="">↓地域を選択してください</option> <option value="1001">北海道</option> <option value="1002">東京都</option> <option value="1003">愛知県</option> <option value="1004">大阪府</option> ・ ・ ・ <option value="1047">沖縄</option> </select> <select name="city" id="city"> <option value="">↓地域を選択してください</option> <option value="2010">札幌</option> <option value="2011">函館</option> <option value="2021">新宿</option> <option value="2022">澁谷</option> <option value="2023">池袋</option> <option value="2031">名古屋</option> <option value="2041">大阪</option> ・ ・ ・ <option value="2051">那覇</option> </select> <script type="text/javascript"> $(function () { $('#pref').change(function(){ var data = $(this).val(); alert(data); }); }); </script> とあったときに 流れとしては #prefで都道府県を選択→#cityでは#prefで選択した都道府県の町のみ表示する。 #prefの選択項目でvalue値を取得することはできたのですが、#cityに反映させることができません。 お分かりの方がいらっしゃいましたら教えていただけないでしょうか。

みんなの回答

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 JSONの形式がわからないのでそこはうまく実装してみてください。 optionの動的生成は以下のような感じでできます。 // まずは初期化 $('#onsen').children().remove(); for ( var i = 0; i < json.size; i ++ ) { $('#onsen').append ( '<option value="'+json[i].value+'">' + json[i].name + '</option>' ); } 上記の場合sizeというキーには取得した要素数 value: 値 name: 表示名 がセットになったものが配列になったJSONのイメージです。 要素数分のループを実行し、要素内のvalueをoptionのvalueに、nameを表示にして <select id="onsen">に追加していくイメージです。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 補足ありがとうございました。 私が実装するなら取得したxmlのパースをphpで行うようにしてJSONにてプルダウン用のデータを取得するようにします。 $('#pref').change(function(){ $.post ( 'onsen.php', {pref: pref}, function(json) { // 受け取ったJSONでoptionを再構築 } ); }); イメージとしてはこんな感じだと思います。 onsen.phpにpost(getでもいいけど)でprefコードを送信、onsen.phpにて受け取ったprefコードを利用してAPIにアクセス。 $pref = $_POST['pref']; $url = "http://jws.jalan.net/APICommon/OnsenSearch/V1/?key=*****&pref=$pref&count=100"; これで取得したxmlをパースしてJSONを生成して出力する。 受け取ったJSONでプルダウンの中身を書き換えます。

h19850323
質問者

補足

わかりにくい説明ご理解いただき有難う御座います。 昨晩やっており、 下記の内容まではできているのですが、わからずじまいのところがありまして・・・ type: "POST", url: "onsen.php(実際は違うファイル名)", data: data, success: function(){ //受け取ったJSONでoptionの再構築方法がわからず・・・ } お分かりになるようでしたらご教示お願いします。 JSONでonsen.phpにprefコードは渡せています。 $urlにもprefコードがはいるようになっているのですが、プルダウンの中身を書き換える方法にとまどっています。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >これのprefとOnsenNameなります。 >prefを選んだときにprefidがOnsenNameと紐づいてが該当されるOnsenNameが表示されるようにしたいのです。 地域のプルダウンだと違う値だと思いますがいかがでしょうか。 どちらかというとこっちのような気がします。 http://www.jalan.net/jw/jwp0100/jww0103.do なんでOnsenNameが出てくるかわかりません。 ごめんなさい、具体的に何がしたいか補足いただけませんか?

h19850323
質問者

補足

説明不足で申し訳ありません。 まず使用するAPIが エリア検索API:http://www.jalan.net/jw/jwp0100/jww0103.do 温泉検索API:http://www.jalan.net/jw/jwp0100/jww0104.do です。 質問に書いたソースの#prefと#cityとありましたが、 #prefと#onsenに変更とさせていただきます。 <select name="pref" id="pref"> <option value="">↓地域を選択してください</option> <option value="010000">北海道</option> <option value="130000">東京都</option> <option value="230000">愛知県</option> <option value="270000">大阪府</option> <option value="470000">沖縄</option> </select> <select name="onsen" id="onsen"> <option value="">↓温泉を選択してください</option> <option value="01">北海道の温泉1</option> <option value="02">北海道の温泉2</option> <option value="03">北海道の温泉3</option> <option value="10">東京都の温泉1</option> <option value="11">東京都の温泉2</option> <option value="20">愛知県の温泉1</option> <option value="30">大阪府の温泉1</option> <option value="40">沖縄県の温泉1</option> </select> <select name="pref" id="pref">は エリア検索APIの都道府県(pref)をループで表示させています。 言語はphpを使用しています。 <option value="<?php Results->Area->cd ?>"><?php echo Results->Area->name ?></option> 地域を選択したら地域に当てはまる温泉のみを表示させたいのです。 例:地域で北海道を選択したら温泉には北海道の温泉1、北海道の温泉2、北海道の温泉3のみが選択できるように。 温泉の部分を読み込んでいるコードが $url = http://jws.jalan.net/APICommon/OnsenSearch/V1/?key=*****&pref=010000&count=100"; としています。 地域を選択した際に地域のvalue値が上記のpref=の値が書き換わる仕様を望んでいます。 例:地域で東京都を選択したら$urlのpref=の値が東京都のvalue値13000に書き換わる。   書き換わったら温泉のセレクトボックスには東京都の温泉のみ選択可能(表示)されるようにする。 と以上を考えております。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 >#cityに反映させることができません。 cityのデータはどうやってprefのコードと紐付くようになっていますか? 見た感じ、prefのコードとcityがどのように関連しているか読み取れませんでした。 ちゃんとリレーションが取れていれば、選択されたprefのコードでcity一覧を取得してoptionを再構築して反映するだけです。

h19850323
質問者

お礼

お忙しい中、ご回答有難う御座います。 紐付けはAPIになります。 http://www.jalan.net/jw/jwp0100/jww0104.do これのprefとOnsenNameなります。 prefを選んだときにprefidがOnsenNameと紐づいてが該当されるOnsenNameが表示されるようにしたいのです。

関連するQ&A

  • 2つのプルダウンの連動に関して

    2つのプルダウンの連動に関して javascript の話になってしまうかと思われますが、教えて下さい。 2つのプルダウンを連動させたいと考えていますが、単純に決められた項目を初期値として 設定するようなプルダウンであれば問題なくできますが、テーブルから取得したデータをプルダウン にセットした後に制御を掛けたいと考えています。 以下のようなソースを活用できないか?と考えていますが、どのような方法があるでしょうか。。。。 《活用ソース》 <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE=JavaScript> <!-- function funcSubmit() { if (document.formMain.pref.selectedIndex == 0 && document.formMain.city.selectedIndex == 0) { window.alert("都道府県と市町村を選択してください"); return false; } else { return true; } } function funcMain(b) { if (document.formMain.pref.selectedIndex == 0) { document.formMain.city.length = 1; document.formMain.city.selectedIndex = 0; } else { if (b) { document.formMain.city.length = 1; document.formMain.city.selectedIndex = 0; } var city = cities[document.formMain.pref.selectedIndex - 1]; document.formMain.city.length = city.length + 1; for (var i = 0; i < city.length; i++) { document.formMain.city.options[i + 1].value = i; document.formMain.city.options[i + 1].text = city[i]; } } } ↓↓↓↓ ※これらの情報をテーブルから取得したデータとしたい。↓↓↓↓  var prefs = new Array("東京都", "大阪府", "愛知県", "千葉県");   var cities = new Array(); cities[0] = new Array("小平市", "町田市", "三鷹市"); cities[1] = new Array("大阪市", "豊中市"); cities[2] = new Array("名古屋市", "半田市"); cities[3] = new Array("千葉市", "市川市", "柏市"); // --> </SCRIPT> </HEAD> <BODY onLoad="funcMain(false)"> <FORM NAME=formMain METHOD=POST ACTION=result.asp onSubmit="return funcSubmit()"> <SELECT NAME="pref" onChange="funcMain(true)"> <OPTION VALUE="" SELECTED>(都道府県を選択してください) <OPTION VALUE="0">東京都 <OPTION VALUE="1">大阪府 <OPTION VALUE="2">愛知県 <OPTION VALUE="3">千葉県 </SELECT> <SELECT NAME="city"> <OPTION VALUE="" SELECTED>(市町村を選択してください) <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> </SELECT> <INPUT TYPE=submit VALUE="登録"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • php セレクトボックス 値取得

    現在phpでフォームを作成しています。 都道府県選択のフォームがあり、データベースに都道府県のマスタが管理されています。 都道府県には北海道~沖縄まで順番にIDが振られています。 選択フォームはセレクトボックスになります。 ソースは簡単ですが <option value="<?php echo $prefid; ?>"><?php echo $prefname; ?></option> とループさせて下記の状態になります。 <select name="pref"> <option value="1">北海道</option> <option value="2">青森県</option> <option value="13">東京都</option> <option value="20">愛知県</option> <option value="47">沖縄</option> </select> とあり、選択された(例:北海道を選択)のち確認画面では1と表示されます。 これを北海道と表示させたいのですが、どのように作ったらよろしいでしょうか? sessionは使用しています。 $_SESSION['pref'] = $_REQUEST['pref']; で値受け取っています。 おわかりの方がいらっしゃいましたらご教示お願いします。

    • 締切済み
    • PHP
  • jquery-コンボボックス-選択状態

    3つのコンボボックスをjqueryを使って連動させております。 連動するコンボボックスを選択しボタンを押下すると 自画面へ遷移します。 その際に先ほどの画面で選択したコンボボックスを選択状態に したくて困っております。 html <select name="area" id="parent"> <option value="1">エリアを選択</option> <option value="2">北海道・東北</option> <option value="3">関東</option>       ・・・ </select> <select name="pref" id="child"> <option class="sub_1" value="1">都道府県を選択</option> <option class="sub_2" value="1">都道府県を選択</option> <option class="sub_2" value="2">北海道</option> <option class="sub_2" value="3">青森</option> <option class="sub_2" value="4">岩手</option> <option class="sub_3" value="1">都道府県を選択</option> <option class="sub_3" value="14">東京</option> <option class="sub_3" value="15">神奈川</option>       ・・・ </select> <select name="region" id="grandsun"> <option class="sub_1" value="1">地域を選択</option> <option class="sub_2" value="1">地域を選択</option> <option class="sub_2" value="0101">札幌</option> <option class="sub_3" value="1">地域を選択</option> <option class="sub_3" value="0201">青森市</option> <option class="sub_3" value="0202">弘前市</option> <option class="sub_3" value="0203">八戸市</option>       ・・・       ・・・ </select> function makeSublist(parent,child,isSubselectOptional,childVal){ $("body").append("<select style='display:none' id='"+parent+child+"'></select>"); $('#'+parent+child).html($("#"+child+" option")); var parentValue = $('#'+parent).attr('value'); $('#'+child).html($("#"+parent+child+" .sub_"+parentValue).clone()); childVal = (typeof childVal == "undefined")? "" : childVal ; $("#"+child+' option[@value="'+ childVal +'"]').attr('selected','selected'); $('#'+parent).change( function(){ var parentValue = $('#'+parent).attr('value'); $('#'+child).html($("#"+parent+child+" .sub_"+parentValue).clone()); $('#'+child).trigger("change"); $('#'+child).focus(); } ); } $(function(){ makeSublist('child','grandsun', true, ''); makeSublist('parent','child', false, '1'); });

  • 条件により押せないボタンを作りたい

    2つのセレクトボックスがあり、どちらも選択していれば「検索」ボタンを押せるが どちらか1つでも選択していなければ「検索」ボタンを押せない状態にしたいのですが どのようにすれば可能でしょうか? <script type="text/javascript"> jQuery(function() { jQuery('#change_btn').click(function() { jQuery.post('price.php', { size : jQuery('#size').attr('value'), days : jQuery('#days').attr('value') }, callBack); }); }); function callBack(data) { jQuery('#change_area').html(data); } </script> <form action="" id="form1" method="post"> <select name="size" id="size"> <option value="">---選択してください---</option> <option value="s1">サイズ01</option> <option value="s2">サイズ02</option> <option value="s3">サイズ03</option> </select> <select name="days" id="days"> <option value="">---選択してください---</option> <option value="d6">6日</option> <option value="d8">8日</option> </select> <input type="button" id="change_btn" value="検索" /> </form>

  • プルダウン選択を変更すると、変更する前に戻るJavaScript

    下記のようなJSで、たとえば「ううう」を選択すると、 「ううう」を選択する前に戻すには、どうすればいいでしょうか? <script> function test(value) {   if (value == "u") {     alert("「ううう」を選択することはできません");     //ここ↓をどう書けばいいですか?   } } </script> <select name="test" id="test" onchange="test(this.value);"> <option value="a">あああ</option> <option value="i">いいい</option> <option value="u">ううう</option> <option value="e">えええ</option> <option value="o">おおお</option> </select> 例) ・「いいい」を選択   ↓ ・「ううう」を選択   ↓ ・「ううう」を選択することはできません、とアラートを出す。   ↓ ・「いいい」の選択に戻る

  • フォームのドロップダウンで未選択のチェックをしたいのですが、下記のよう

    フォームのドロップダウンで未選択のチェックをしたいのですが、下記のようにしたのですがうまくいきません。・・・原因は id[1] だと思うのですが、こういう場合JavaScriptには、どのように記述すればよいのでしょうか? ※ドロップダウンの name="id[1]" は、変更できません。 よろしくお願いします。 <script language="JavaScript"> <!-- function check(){ if(document.cart_quantity.id[1].selectedIndex == 0){ alert('選択してください'); return false; } return true; } //--> </script> <form name="cart_quantity" method="post" action="" onSubmit="return check()"> <select gtbfieldid="272" name="id[1]" id="attrib-1"> <option value="1" selected="selected">選択してください</option> <option value="2">いちご</option> <option value="3">みかん</option> <option value="4">りんご</option> </select> <input type="submit" value="送信" name="submit"> </form>

  • Javascriptでセレクトメニューの選択チェックの方法

    Javascriptでセレクトメニューのフォームをチェックしたいのですが、 リストメニューの「選択して下さい」を選んだままだと、「番号を選択して下さい。」とエラーを出したいのですが、下記の様に書いてみたのですが、うまく動きません…どのように書けばいいか教えて下さい。宜しくお願いします。 <script language=\"JavaScript\"> <!-- function Check() { var str = document.form.a.value; if(document.form.a.value == "0") { alert("番号を選択して下さい"); } //--> </script> <form id="form" name="form" method="post" action="##"> <select name="a" onblur="Check();"> <option value="0">選択して下さい</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <input type="submit" name="Submit" value="登録" onClick="Check();"> </form>

  • selectが複数ある場合の値取得について

    お世話になります HTML内に下記のようなフォームが複数存在しています。 select[name="page_name"]が変更されたときに値を取得しPHP に送信したいのですが、一番上にあるselectの値が取得されてしまいます。 ひとつのscriptで複数のselectに対応したい場合、どのような記述になりますでしょうか? 助けていただきたいです。よろしくお願いします。 <!--1番目のセレクト--> <form method="post" action="javascript:void(0);"> <input type="hidden" id="img_id" name="img_id" value="3"> <select name="page_name"> <option value="">選択してください</option> <option id="page_name" value="1">あああ</option> <option id="page_name" value="2">いいい</option> <option id="page_name" value="3">ううう</option> </select> </form> <!--2番目のセレクト--> <form method="post" action="javascript:void(0);"> <input type="hidden" id="img_id" name="img_id" value="4"> <select name="page_name"> <option value="">選択してください</option> <option id="page_name" value="1">あああ</option> <option id="page_name" value="2">いいい</option> <option id="page_name" value="3">ううう</option> </select> </form> <!--3番目のセレクト--> ---省略--- /*script*/ $('select[name="page_name"]').change(function() { var data = { 'page_name' : $('#page_name').val(), 'img_id' : $('#img_id').val() }; $('#name').text(data['img_id']); $.ajax({ type: "POST", url: "/admin/change/", data:data }); alert("画像使用ページを変更しました!"); return false; }); });

  • IDの取得、繰り返しに問題があるようなんですが・・・

    複数のセレクトの中から選んだ内容をコピーするスクリプトなんですが、 function answerPut(){ var answer = document.getElementById("s1"); var answerCopy = document.getElementById("answer"); answerCopy.value=answer.value } ▲このように単独で1つのフォームからならコピーできたのですが これを複数のフォームに対応させるためにforを使ってみたのですが どうにもうまくいきません。お知恵を拝借いただければ幸いです。 ▼うまくいかないスクリプト <html> <body> <script type="text/javascript"> function answerPut(){ for(var i=1; i<=3; i++){ var answer = document.getElementById(id+i); var answerCopy = document.getElementById("answer"); answerCopy.value=answer.value } } </script> (1)<select name="" id="s1" onChange="answerPut();"> <option value="あ1">あ1</option> <option value="い1">い1</option> <option value="う1">う1</option> </select> (2)<select name="" id="s2" onChange="answerPut();"> <option value="あ2">あ2</option> <option value="い2">い2</option> <option value="う3">う2</option> </select> (3)<select name="" id="s2" onChange="answerPut();"> <option value="あ1">あ3</option> <option value="い2">い3</option> <option value="う3">う3</option> </select> <br> <br> ▼選んだ回答内容が入る<br> <input type="text" name="9" value="" size="40" id="answer"> </body> </html>

  • javascriptでコメントアウトができません

    下記の様に 「/* ・・・・・ */」でコメントアウトしていますが、「/*」 「*/」も文字としてそのまま画面に表示され、非表示にしたいSELECTの枠も表示されてしまいます。 ご助言いただきたく宜しくお願い致します。 <body style="margin:0px; padding:0px;" onload="load()"> /* <body style="margin:0px; padding:0px;" onload="load()"> <FORM NAME=formMain > <SELECT id="categorySelect" NAME="pref" onChange="funcMain(true)"> <OPTION VALUE="" SELECTED>(カテゴリーを選択してください) <OPTION VALUE="0">食事 <OPTION VALUE="1">病院 <OPTION VALUE="2">小売店 <OPTION VALUE="3">洋服 </SELECT> <SELECT id="subcategorySelect" NAME="city"> <OPTION VALUE="" SELECTED>(サブカテゴリーを選択してください) <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> <OPTION VALUE=""> </SELECT> </FORM> */ <div> <input type="text" id="addressInput" size="40"/> <select id="radiusSelect"> <option value="0.5" selected>0.5km</option> <option value="1">1km</option> <option value="20">20km</option> </select> <input type="button" onclick="searchLocations()" value="検索へGO!"/> </div> <div><select id="locationSelect" style="width:25%;visibility:hidden"></select></div> <div id="map" style="width: 100%; height: 80%"></div> </body> </html>