• ベストアンサー

フォームの生年月日のデータから年齢を割り出し、sumitしたい

はじめまして。質問させてください。 現在、個人情報を入力するフォームメールを作成中なのですが、生年月日を<select>タグで選択し、submitを押したときに、項目のチェックと年齢計算をして、年齢を<hidden>タグの値としてsubmitできるfunctionを作りたいのですが、<select>タグ内の情報が多すぎると、エラーになってしまい、submitできません。 下記、ソースです。 function CHK() { frm = document.forms[0]; //生年月日(年) if( frm.birth_year.selectedIndex == 0 ){ frm.birth_year.focus(); alert( "生年月日の年を入力してください。" ); return false; } ↑こんな感じのフォームチェックが10個ぐらい if( frm.birth_year.value != "" && m.birth_month.value != "" && frm.birth_day.value != "") { today = new Date(); tage = today.getFullYear() - Number(frm.birth_year.value); if (Number(frm.birth_month.value) > today.getMonth()+1 ) { tage = tage -1; }else if ( Number(frm.month.value) == today.getMonth()+1 && Number(frm.birth_day.value) > today.getDate() ) { tage = tage -1; } frm.age.value = tage; } frm.submit(); } 色々ためしているのですが、どうしてもエラーになってしまいます。どなたか解決法をご存知の方がいらっしゃいましたら、教えてください。

  • yoc
  • お礼率33% (1/3)

質問者が選んだベストアンサー

  • ベストアンサー
  • you111111
  • ベストアンサー率45% (20/44)
回答No.2

ご提示のソースでテストしてみましたが、 >if( frm.birth_year.value != "" && m.birth_month.value != "" && frm.birth_day.value != "") { の2番目frmがmになっている為エラーとなる以外、Selectを増やしても、optionを増やしても実行可能でしたが? #1さんのおっしゃる様に環境の提示があるとよいのでは?

その他の回答 (1)

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.1

><select>タグ内の情報が多すぎると <slect>~</select>内のoptionが多いと言うことでしょうか。<select>自体の属性が多いと言うことでしょうか。 >色々ためしているのですが、どうしてもエラーになってしまいます。 どんな環境で、どんなエラーになるのでしょうか。

関連するQ&A

  • 生年月日関係の計算

    エクセルのバージョンは2002です。 2000/01/01のような生年月日のデータから、18年と1ヵ月後(年月のみ)のデータを作ります。 書式を変更するのではなく、新しいセルに打ち込みます。 なお、給与計算月(21日~翌20日)によるため、 たとえば1995/7/25なら2013/9      1995/7/15なら2013/8      1995/11/15なら2013/12            1995/11/25なら2014/1      1995/12/25なら2014/2  というように「給与計算月ベースの18年と1ヵ月後」のデータになるような式を作ります。 この条件で、L83のある生年月日を変換するのに =IF(MONTH(L83)+1=13,YEAR(L83)+19,IF(AND(DAY(L83)>20,MONTH(L83)+2=13),YEAR(L83)+19,YEAR(L83)+18))&"/"&IF(AND(DAY(L83)>20,MONTH(L83)+1=13),2,IF(AND(MONTH(L83)+2=13,DAY(L83)>20),1,IF(DAY(L83)>20,MONTH(L83)+2,IF(MONTH(L83)+1=13,1,MONTH(L83)+1)))) こんな式を強引に作ってうまく適用できたのですが、 もっとうまいやり方は無かったのだろうか・・・と思って質問しました。 やってみると意外に複雑です。 式を単純化できる方いらっしゃいましたら、後学のために教えてください。 よろしくお願いします

  • hiddenフォームのvalueを自動生成したいのですが...

    JavaScriptで生成した値を、同じページの中にあるinput type=hiddenフォームのvalueの値として使用したいのですが、うまく行きません。 普通のinputタグであれば、 <SCRIPT Language="JavaScript"> <!-- function SetOrderId() { myDate = new Date(); Year = new String(myDate.getFullYear()); Month = new String(myDate.getMonth()+1); Day = new String(myDate.getDate()); if ( Day.length == 1 ) Day = "0" + Day; document.forms[0].OrderId.value = Year + "-" + Month + "-" + Day } //--> </SCRIPT> <BODY onLoad="SetOrderId()"> <INPUT NAME="OrderId" TYPE="TEXT" onClick="SetOrderId()"> で、ページを開いたときにOrderIdフォームに値が代入されているのですが、 <input type=hidden name="OrderId"> としたときには、上記のスクリプトで生成した値がinput type=hiddenのvalueに設定されず、困っています。 どうすればinput type=hiddenのvalueの値にJavaScriptで生成した値を代入できるのでしょうか?

  • SUZUKA substr関数に関する質問

    SUZUKAを使ってイベントまでの日数をカウントダウンするコンテンツを作っています actionscriptは以下のようになっていて、event_dayから各位の数字を抜き出して、フレームを進めるというものですがsubstr関数が機能しません。Number関数は機能します。event_dayをダイナミックテキストで出力させたらうまくいきました。デジタルで表示させたいのでわれか分かる方がいましたら教えてください。 this.onEnterFrame = function() { //Date オブジェクトを生成 date_obj=new Date(); //今日の年月日を取得 today_year=date_obj.getFullYear(); today_month=date_obj.getMonth(); today_date=date_obj.getDate(); //イベントまでの協定世界時をミリ秒で取得 eventUTC=Date.UTC(2008,11-1,29); //現在までの協定世界時をミリ秒で取得 todayUTC=Date.UTC(today_year,today_month,today_date); //イベントまでの差分を日数に直す event_day=(eventUTC-todayUTC)/1000/60/60/24; //各の抽出 num1=123; num=event_day.substr(0,1); this.hi3.gotoAndStop(Number(event_day.substr(0,1))); this.hi2.gotoAndStop(Number(event_day.substr(1,1))+1); this.hi1.gotoAndStop(Number(event_day.substring(1,2))+1); };

  • 生年月日・年月日のフォームが表示されない

    お世話になります。 下記のタグでは、表示されません。 サーバーの問題なのか、タグの問題かわかりませんので、 まず、タグを見て頂けませんか? よろしくお願いします。 ------------------------------------------------ <td width="30%">生年月日</td> <td width="70%"><script type="text/javascript"> document.write("<select name=\\"296643_year\\">"); for(i=1900;i<2010;i++){ if(i==1950){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); } }document.write("</select>"); document.write(" 年 "); document.write("<select name=\\"296643_month\\">"); for(i=1;i<13;i++){ if(i==1){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); }} document.write("</select>"); document.write(" 月 "); document.write("<select name=\\"296643_day\\">"); for(i=1;i<32;i++){ if(i==1){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); }}document.write("</select>"); document.write(" 日 "); </script> <br><font size="1"></font></td> </tr> <tr> ---------------------------------------------------------------- <td width="30%">電話の場合の日時</td> <td width="70%"> <script type="text/javascript"> document.write("<select name=\\"296652_year\\">"); for(i=2009;i<=2010;i++){ if(i==2009){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); } } document.write("</select>"); document.write(" 年 "); document.write("<select name=\\"296652_month\\">"); for(i=1;i<13;i++){ if(i==4){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); } } document.write("</select>"); document.write(" 月 "); document.write("<select name=\\"296652_day\\">"); for(i=1;i<32;i++){ if(i==23){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); }} document.write("</select>"); document.write(" 日 "); document.write("<select name=\\"296652_hour\\">"); for(i=0;i<24;i++){ if(i==0){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); } } document.write("</select>"); document.write(" 時 "); document.write("<select name=\\"296652_minute\\">"); for(i=0;i<60;i=i+5){ if(i==0){ document.write("<option value="+i+" selected>"+i+"</option>"); }else{ document.write("<option value="+i+">"+i+"</option>"); }} document.write("</select>"); document.write(" 分 "); </script><br><font size="1"></font></td> </tr> <tr>

    • ベストアンサー
    • HTML
  • <?php

    <?php if (isset($_POST['reg']) && isset($_POST['reg'])) { $ErrFlg = false; // 氏名欄をチェック $first_name = $_REQUEST['first_name']; $last_name = $_REQUEST['last_name']; if (!trim($first_name) || trim($last_name) == '') { $_POST['err_name_req'] = '氏名が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_name_req']); } // 生年月日欄をチェック $b_year = $_REQUEST['b_year']; $b_month = $_REQUEST['b_month']; $b_day = $_REQUEST['b_day']; if (!trim($b_year) || trim($b_month) || trim($b_day) == '') { $_POST['err_birthday_req'] = '生年月日が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_birthday_req']); } if (checkdate($b_month, $b_day, $b_year) === false) { $_POST['err_birth_ereg'] = '生年月日が正しくありません。<br />'; $error = TRUE; } else { unset($_POST['err_birth_ereg']); } } ?> <html> <body> <form action="<?php $_SERVER["PHP_SELF"]; ?>" method="POST"> 氏名<br /> <?php print $_POST['err_name_req']; ?><br /> <input type="text" name="first_name" value="<?php print $first_name; ?>" /><input type="text" name="last_name" value="<?php print $last_name; ?>" /><br /> 生年月日<br /> <?php print $_POST['err_birth_req'].$_POST['err_birth_ereg']; ?><br /> <input type="text" name="b_year" value="<?php print $b_year; ?>" size="5" />年 <input type="text" name="b_month" value="<?php print $b_month; ?>" size="2" />月 <input type="text" name="b_day" value="<?php print $b_day; ?>" size="2" />日 <br /> <input type="submit" name="reg" value="登録" /> </form> </body> </html> としています。 登録ボタンを押した際に入力チェックされることがなければデータベースに登録したいのですが、どこに記述してよいのか困っています。 また、どのように記述したらよろしいでしょうか? イメージとしては登録ボタンを押したら、「登録しました。」というコメントだけが表示されるようにしたいのですが・・・ javascriptの使用は考えておりませんので、できればPHPでお願いいたします。 もしお分かりの方がいらっしゃいましたらご教授いただけないでしょうか? また上記の内容でおかしいところがありましたらご指摘いただけないでしょうか?

    • ベストアンサー
    • PHP
  •  EXCELのIF関数についての質問です。

     EXCELのIF関数についての質問です。  IF関数については、自信がありました。 たとえば、G13をテストの得点だとして、80点よりも高い得点なら合格、さもなければ不合格と表示させてければ、if(G13>80,"合格","不合格")でOKのはずです。  ところが、今日何歳なのかを表示させる場合、G13に生年月日をいれて、 IF(OR(MONTH(TODAY())>MONTH(G13),AND(MONTH(TODAY())=MONTH(G13),DAY(TODAY())>=DAY(G13)))=TRUE,YEAR(TODAY())-YEAR(G13),YEAR(TODAY())-YEAR(G13-1))と引継ぎをうけました。  この中にあるTRUEの意味がわかりません。私の解釈では、「今日の月が誕生月よりも絶対値が大きい」又は「今日の月と誕生月が同じで、今日の日が誕生の日の絶対値と同じか多い」場合、年齢は「今日の年」-「誕生の年」、そうでない場合は年齢は「今日の年」-1-「誕生の年」です。  なので、TRUEはなくてもよいと思い、削除してみましたが、エラーが出ました。  よくわからないので、お手数ですが、教えてください

  • PHPで、xmlを書き換えたい

    PHP初心者です。 年月日を記録してあるxmlを、phpから書き換えたいのですが、 動作しなくて困っています。。 現在の年月日は 2011.4.7 で 書き換え後の年月日は 2100.9.9 にしたいです。 「index.html」と「memory.xml」が同じフォルダ内にあります。 ●memory.xmlの内容は以下のとおりです-------------------- <?xml version="1.0"?> <memory>   <year>2011</year>   <month>4</month>   <day>7</day> </memory> ●htmlに以下のphpコードを書きました-------------------- <?php   $memoryFile = 'memory.xml';   if ( $xml = simplexml_load_file ( $memoryFile ) ) {     function changeMemory ( $year, $month, $day ) {       $xml -> year = $year; //年の書き換え       $xml -> month = $month; //月の書き換え       $xml -> day = $day; //日の書き換え       $xml -> asXML ( $memoryFile ); //ファイルに書き出す     }     changeMemory ( 2100 , 9 , 9 );   } ?> どうも、以下の1文が作動してくれない気がします。。 $xml -> asXML($memoryFile); //ファイルに書き出す どなたか原因がわかる方いらっしゃいましたら、 なにとぞご教授よろしくお願いいたします。。

    • ベストアンサー
    • PHP
  • javascript カウントダウンについて

    下記のようなjavascript でカウントダウンをしています。 ですが、指定日を過ぎると、00 表示になってしまいます。 これを指定日の指定時間を過ぎたら、-- という表示に変更し、 また、bodyないのタグにidを使って「指定日を過ぎました。」という 表示を出したいのですが、ご教授ねがいます。 <script language="javascript"> <!-- function countdown(year, month, day, hour, minute) { Today = new Date(); Todays_Year = Today.getFullYear() - 2000; Todays_Month = Today.getMonth() + 1; Todays_Day = Today.getDate(); Todays_Hour = Today.getHours(); Todays_Date = (new Date(Todays_Year, Todays_Month, Todays_Day, Todays_Hour, Today.getMinutes(), Today.getSeconds())).getTime(); Target_Date = (new Date(year, month, day, hour, minute, 00)).getTime(); Time_Left = Math.round((Target_Date - Todays_Date) / 1000); if(Time_Left < 0) Time_Left = 0; days = Math.floor(Time_Left / (60 * 60 * 24)); Time_Left %= (60 * 60 * 24); hours = Math.floor(Time_Left / (60 * 60)); Time_Left %= (60 * 60); minutes = Math.floor(Time_Left / 60); Time_Left %= 60; seconds = Time_Left; cDay = document.getElementById("counter_day"); cHour = document.getElementById("counter_hour"); cMin = document.getElementById("counter_min"); cSec = document.getElementById("counter_sec"); cDay.innerHTML = GetFormated(days); cHour.innerHTML = GetFormated(hours); cMin.innerHTML = GetFormated(minutes); cSec.innerHTML = GetFormated(seconds); //Recursive call, keeps the clock ticking. setTimeout('countdown(' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ');', 1000); } function GetFormated(i) { if(i<10) { return "0"+i; } return i; } //--> </script> </head> <body> <span id="counter_day"></span> <span id="counter_hour"></span> <span id="counter_min"></span> <span id="counter_sec"></span> <script language="JavaScript"> <!-- countdown('07,11,05,21,00'); //-->

  • ファイルメーカーPro8.5で年齢表示

    こんばんわ。はじめまして。 ファイルメーカーPro8.5で年齢を出す計算が上手くできません。 式としては、 If( DayOfYear( 生年月日 ) <= DayOfYear( Today) ; Year( Today) - Year( 生年月日 ) ; ( Year( Today) - Year( 生年月日 )) - 1) という式を作りました。 生年月日の項目に生年月日を入れると、年齢の項目に年齢がでるようにしたのですが、その年齢の項目は100行あり、正確な年齢がでるのは1行目だけであとの2~100行まで、例えばS42.1.14と生年月日を打つと年齢が-1962というふうに出ます。 原因がわかりましたら教えてください。 お願いします。

  • JavaScriptでdocument.fileCreatedDate

    JavaScriptでdocument.fileCreatedDateを使おうとして <script type="text/javascript"> <!-- var date = new Date(document.fileCreatedDate); var year = date.getYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hour = date.getHours(); var min = date.getMinutes(); if(year < 2000){year += 1900;} if(month < 10){month = "0" +month;} if(day < 10){day = "0" + day;} if(hour < 10){hour = "0" + hour;} if(min < 10){min = "0" + min;} document.write("作成日:" + year + "年" + month + "月" + day + "日" + hour + "時" + min + "分" + "<BR>"); //--> </script> のようなスクリプトを作ったんですが表示がおかしくなります。 Google chromeでも正常に表示できるようにしたいです。 よろしくおねがいします。