- ベストアンサー
JavaScriptの結果値を渡す方法について
- JavaScriptの結果値を渡す方法について悩んでいます。フォーカス遷移時、関数を呼び出してフォームの入力値から計算してテキストボックスに結果値を代入するという処理を考えています。
- 関数内で結果を渡そうとしているdocument.Data.Answer.valueの部分がうまく指定できていないため、valueに代入できていないのでは?と思っています。
- どのようにすればJavaScriptの結果値を渡すことができるのでしょうか?お知恵を拝借したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です すみません、曲解していたようで単なるjavascriptの話でしたね nameで要素にアクセスするとロクなことがないので 手っ取り早く処理するならidを振ることです。 ざっくりこんな感じで <script> function go(){ var get = 1; for(var i=1;i<5;i++){ var answer=document.getElementById("a"+i.toString()); var start_time=document.getElementById("s"+i.toString()); answer.value=parseFloat(start_time.options[start_time.selectedIndex].value)-get; //answer.value=parseFloat(start_time.value)-get; //これでもいけるはず } } </script> <?php $day = 1; while ($day < 5){ ?> <form> <tr> <td><select name="<?php echo $day ?>[start_time]" id="s<?php echo $day ?>" onblur="go()"> <option value="1" >1</option> <option value="2" >2</option> <option value="3" >3</option> <option value="4" >4</option> </select> </td> <td><input type="text" name = "<?php echo $day ?>[Answer]" id="a<?php echo $day ?>" readonly value="" style=width:40px></td> </tr> </form> <?php $day++; } ?>
その他の回答 (2)
- Ogre7077
- ベストアンサー率65% (170/258)
よくわかりませんが、こういうことでしょうか <script> function go() { var form = document.forms['data']; var valueGet = 1; for (var day = 1; true; day++) { var startTime = form.elements['startTime' + day]; var answer = form.elements['answer' + day]; if (!startTime || !answer) break; answer.value = ''+(parseFloat(startTime.value) - valueGet); } } </script> <form name=data><table> <?php for ($day = 1; $day < 5; $day++){ ?> <tr><td> <select name="startTime<?=$day?>" onblur="go()"> <option value=1>1<option value=2>2<option value=3>3<option value=4>4 </select> <input type=text name="answer<?=$day?>"> <?php } ?> </table></form> 注意点 * 繰り返しの処理はループで書きましょう * JavaScript の変数名に $ は誤解を招くので、使わないほうが良いでしょう * 変数名 get は誤解を招くので、動詞以外で命名しましょう * 同名の <form name> が複数あるのは感心しませんので、一つにしましょう
お礼
回答ありがとうございます。 お指摘いただいて、変数を変えました。 確かに、JavascriptとPHPで混合して見づらかったです。 ありがとうございました。
補足
回答ありがとうございます。 処理のサンプル用ソースをざっと書いたのでループなど忘れてしまいました。 変数名や変数指定などもさっと書いてしまったので紛らわしかったみたいですみません。 動作としてお教えいただいた感じになると思います。ありがとうございます。 フォーカス遷移時に入力値に対して計算するというものです。 お聞きしたいのですが、name属性が少し変わったみたいですがこの場合、[name][$day]の形で取れるということでいいのでしょうか。 また、同名のform nameが複数あるというのは関数の方で 複数使っているということでしょうか。 たびたび申し訳ありません、よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
自覚しているかどうか微妙な質問ですが かなりおかしい話をしています javascriptの処理をPHPに戻すことはできない。 やるのであればajaxでデータを再送し、その結果をjavascriptで描画しなおすくらい。 そうでなければGETやPOSTで普通にサーバーにデータを送り 結果をPHPで得ることです。
お礼
回答ありがとうございます。
補足
回答ありがとうございます。 私の説明が変なことをいっているようなのだと思います。 私としては コントロールに値を入力、コントロールからフォーカスが外れたときに関数を呼び出します。 その関数内で入力値の計算を行い、結果値をvalueに指定するということを想定しています。 ループ処理をしているのでname属性が2次元配列のような形になっているのですが、 たとえばループ処理しない場合nameは2次元にならないので valueに代入して結果を表示できます。 また、色々調べたときに関数を呼び出す時に変数を渡して関数内で処理する、結果を変数に代入する。 その結果値を表示するといった方法でもできました。(この方法は自分の実装に合わないようなので方法だけ確認しました。) なので結果値を渡すときにnameの指定がおかしいのだと思います。 長文失礼しました、よろしくお願いします。
お礼
回答ありがとうございます。 自分のお指摘いただいた点を参考に自分のソースを加筆・修正したところ動作確認で来ましたのでお礼申し上げます。 .netばかりやっていて最近PHPを学習始めたばかりでわからない部分が多々ありますが、参考になりました。
補足
回答ありがとうございます。わかりやすかったです。 ただ、わからないところがあって調べてもちょっとつかめたかったのですが 変数の[value]の用途がいまいちわからなかったのですが 変数に直接代入する形ではいけないということですよね。 その参照しているコントロール(document.form,,,)に代入するという意味でよろしいのでしょうか。 その場合は代入するときだけ 変数.value = 計算式,,, のような形だと思います。 また[parseFloat]は文字列を数値に変換する意味だと思うのですが計算式が複数ある場合 計算対象の変数に[parseFloat]で変換し計算するという認識でよろしいでしょうか。 たびたび、申し訳ありませんがよろしくお願いします。