![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
JavaScriptの結果値を渡す方法について悩んでします
フォーカス遷移時、関数を呼び出してフォームの入力値から計算してテキストボックスに結果値を
代入するという処理を考えています
<script type="text/javascript">
//--関数
function go(){
$get = 1;
$a_data = parseFloat(document.Data.start_time.value);
$b_data = parseFloat(document.Data.start_time.value);
$c_data = parseFloat(document.Data.start_time.value);
$d_data = parseFloat(document.Data.start_time.value);
document.Data.Answer.value = $a_data - $get;
document.Data.Answer.value = $b_data - $get;
document.Data.Answer.value = $c_data - $get;
document.Data.Answer.value = $d_data - $get;
}
</script>
<?php
$day = 1;
while ($day < 5){
?>
<form name = "Data">
<tr>
<td><select name="<?php echo $day ?>[start_time]" 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]" readonly value="" style=width:40px></td>
</tr>
</form>
<?php
$day++;
}
?>
関数内で結果を渡そうとしているdocument.Data.Answer.valueの部分がうまく指定でいていないため
valueに代入できていないのでは?と思っています。
よろしくお願いします。
No.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++;
}
?>
この回答への補足
回答ありがとうございます。わかりやすかったです。
ただ、わからないところがあって調べてもちょっとつかめたかったのですが
変数の[value]の用途がいまいちわからなかったのですが
変数に直接代入する形ではいけないということですよね。
その参照しているコントロール(document.form,,,)に代入するという意味でよろしいのでしょうか。
その場合は代入するときだけ
変数.value = 計算式,,, のような形だと思います。
また[parseFloat]は文字列を数値に変換する意味だと思うのですが計算式が複数ある場合
計算対象の変数に[parseFloat]で変換し計算するという認識でよろしいでしょうか。
たびたび、申し訳ありませんがよろしくお願いします。
回答ありがとうございます。
自分のお指摘いただいた点を参考に自分のソースを加筆・修正したところ動作確認で来ましたのでお礼申し上げます。
.netばかりやっていて最近PHPを学習始めたばかりでわからない部分が多々ありますが、参考になりました。
No.2
- 回答日時:
よくわかりませんが、こういうことでしょうか
<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> が複数あるのは感心しませんので、一つにしましょう
この回答への補足
回答ありがとうございます。
処理のサンプル用ソースをざっと書いたのでループなど忘れてしまいました。
変数名や変数指定などもさっと書いてしまったので紛らわしかったみたいですみません。
動作としてお教えいただいた感じになると思います。ありがとうございます。
フォーカス遷移時に入力値に対して計算するというものです。
お聞きしたいのですが、name属性が少し変わったみたいですがこの場合、[name][$day]の形で取れるということでいいのでしょうか。
また、同名のform nameが複数あるというのは関数の方で
複数使っているということでしょうか。
たびたび申し訳ありません、よろしくお願いします。
回答ありがとうございます。
お指摘いただいて、変数を変えました。
確かに、JavascriptとPHPで混合して見づらかったです。
ありがとうございました。
No.1
- 回答日時:
自覚しているかどうか微妙な質問ですが
かなりおかしい話をしています
javascriptの処理をPHPに戻すことはできない。
やるのであればajaxでデータを再送し、その結果をjavascriptで描画しなおすくらい。
そうでなければGETやPOSTで普通にサーバーにデータを送り
結果をPHPで得ることです。
この回答への補足
回答ありがとうございます。
私の説明が変なことをいっているようなのだと思います。
私としては
コントロールに値を入力、コントロールからフォーカスが外れたときに関数を呼び出します。
その関数内で入力値の計算を行い、結果値をvalueに指定するということを想定しています。
ループ処理をしているのでname属性が2次元配列のような形になっているのですが、
たとえばループ処理しない場合nameは2次元にならないので
valueに代入して結果を表示できます。
また、色々調べたときに関数を呼び出す時に変数を渡して関数内で処理する、結果を変数に代入する。
その結果値を表示するといった方法でもできました。(この方法は自分の実装に合わないようなので方法だけ確認しました。)
なので結果値を渡すときにnameの指定がおかしいのだと思います。
長文失礼しました、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
ラジオボタンの選択に応じてプ...
-
セレクトボックスを未選択の状...
-
複数のプルダウンメニューの組...
-
Javascriptでフォームのセレク...
-
selectボックスの選択結果を変...
-
javascriptだけでドロップダウ...
-
selectを変更不可にしたい
-
リストボックス内の重複したも...
-
<input>の選択肢をプルダウンメ...
-
セレクトボックス自動表示
-
javascriptでセレクトボックス...
-
return trueとreturn falseの用...
-
ラジオボタンの選択で解答・点...
-
ハイパーリンクを別ウインドウ...
-
VBscriptの配列変数をJavascrip...
-
プルダウン 項目が多いので先頭...
-
name属性のないformタグの、中...
-
<JavaScript>tableタグを入力不...
-
追加ボタンを押した際に ok ボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセレクトボックス...
-
selectを変更不可にしたい
-
全てのselect要素をデフォルト...
-
<input>の選択肢をプルダウンメ...
-
Selectボックスの一覧表示方法
-
プルダウン選択を変更すると、...
-
セレクトボックスで配列を呼び...
-
JavaScriptで<select>の<option...
-
プルダウンのoptionの表示・非...
-
select要素のvalueを配列で取得...
-
【javascript】連想配列からセ...
-
ラジオボタンとプルダウンを連...
-
同じ名前のセレクトがある場合...
-
selectボックスの選択結果を変...
-
プルダウンの値によって活性・...
-
javascriptで合計金額を算出し...
-
プルダウンメニューに連動する...
-
リストボックス内の重複したも...
-
VBScriptでHTMLのセレクトボッ...
-
連想配列を使ってコンボボック...
おすすめ情報