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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Selectボックスの一覧表示方法
-
プルダウン選択を変更すると、...
-
全てのselect要素をデフォルト...
-
二つのセレクトボックス間での...
-
javascriptで合計金額を算出し...
-
ラジオボタンとプルダウンを連...
-
複数のプルダウンを1つにまとめ...
-
リストボックス内の重複したも...
-
3つのselectでURLパラメータを...
-
select option value が IE だ...
-
C#(csファイル)とjavascriptと...
-
<select> をmultiple にしてい...
-
<input>の選択肢をプルダウンメ...
-
return trueとreturn falseの用...
-
sessionの値でボタンを活性・非...
-
onClickとsubmitの処理順序
-
onchangeイベントを強制的に発...
-
ボタンを押すとチェックボック...
-
テキストボックスの入力をリセット
-
JavaScriptで特定のtdタグにcla...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Selectボックスの一覧表示方法
-
javascriptでセレクトボックス...
-
プルダウン選択を変更すると、...
-
全てのselect要素をデフォルト...
-
selectを変更不可にしたい
-
<input>の選択肢をプルダウンメ...
-
VBScriptでHTMLのセレクトボッ...
-
スマホのフォームでのselect複...
-
複数のプルダウンを1つにまとめ...
-
selectが変更されたらnameを指...
-
select要素のvalueを配列で取得...
-
同じ名前のセレクトがある場合...
-
javascript:データを日本語で...
-
ラジオボタンとプルダウンを連...
-
selectボックスの選択結果を変...
-
プルダウンの値によって活性・...
-
<select> をmultiple にしてい...
-
連動プルダウンのclonenode
-
リストボックス内の重複したも...
-
selectのすべての値を送信する方法
おすすめ情報