- PR -

JavaScriptでTextBoxの合計

投稿者投稿内容
あーこ
会議室デビュー日: 2008/12/02
投稿数: 18
投稿日時: 2009-03-02 12:35
VB2008にてWebアプリを作成しています。

FormViewのInsertItemTemplateの中に「sc_TextBox1」から「sc_TextBox10」までのTextBoxとその合計を表示する「totalTextBox」を配置しました。

希望する動作は、sc_TextBox1〜10の中に数字を入れるとtotalTextBoxに
合計が表示される様にしたいのです。
sc_TextBox1〜10の全てに数字が入るわけではありません。
また、TextBoxに数字を入れるたびに合計を変化させたいです。

JavaScriptを使用するとおもうのですが、
「totalTextBox」に表示させる方法がわかりません。

下記は途中まで作成したコードです。
どの部分に何を足せば良いのでしょうか?

function total() {
var stat = true;
var c = 0;
for (i = 0; i < form1.elements.length; i++) {
if (form1.elements[i].name.substr(11, 2) == "sc_TextBox") {
if (isNaN(form1.elements[i].value)) stat = false;
c = c + 1 * form1.elements[i].value;

}
}
}



宜しくお願いします。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2009-03-02 12:46
テキストボックスに「表示させる」というのは「値を入れる」のと一緒です。
「値を取る」ことはできているのだから、「値を入れる」こともできるでしょう。

…というか、同じようなサンプルは探せばいくらでもあると思います。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-02 13:23
多分、現状うまくいってないのでは?


現状で気になった点を何点か

1.substr(11, 2)が"sc_TextBox"になることはない
substr(11, 2) → 11文字目から2文字 の意味
2.設定したstatを利用していない
3.statがループの2順目以降初期化されていない

でしょうか。


表示させる方法は、mioさんとかぶりますが、
計算が終わった後で、テキストボックスに値を入れればいいと思います。


あーこ
会議室デビュー日: 2008/12/02
投稿数: 18
投稿日時: 2009-03-02 13:29
mioさん、ありがとうございます。

先程のコードも検索をかけて似た様な内容のものから自身のものに置き換えました。

ただ、そのサンプルはボタンを押すと表示される内容になっていたので、

この部分だけ違いが生じてしまい、わからなくなりました。

又、値がとれているかの確認をしたくて、

ブレークポイントを置いてみたのですが、TextBoxに数字を入力しても

ブレークポイントで止まってくれませんでした。

他に似た様なサンプルがあるか、再度探してみます。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-03-02 13:36
・テキストボックスの入力値を取得する処理
・複数の値の合計を計算する処理
・テキストボックスに任意の値を表示する処理

を別々に考えて作ってみて、
それを最後にくっつけてみたらわかりやすいんじゃないでしょうか。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-02 14:19
引用:

ブレークポイントで止まってくれませんでした。


ブレークポイントをどこに貼ったかにもよりますが、

c = c + 1 * form1.elements[i].value;

にブレークポイントを貼っているのであれば現状のままでは通らないと思います。
(前述のsubstrの絡みで、そのブロックにはいらないため)


#追記

[ メッセージ編集済み 編集者: デューン 編集日時 2009-03-02 14:22 ]
あーこ
会議室デビュー日: 2008/12/02
投稿数: 18
投稿日時: 2009-03-02 14:29
デューンさん、Kingさん ありがとうございます。

「form1.elements[i].id.substr(11, 2) == "sc_TextBox"」は、
Form上にある[sc_TextBox]という文字が含まれるidの取得と思っていました。

VBでいうと下記の動作みたいな事と思っていました。
又、下記のことをJavaScriptで記述したいです。

Dim total as textbox=FormView1.Row.FindControl("sc_TextBox"+Left(sender.ID,11))

TextBoxのIDで「sc_TextBox」という部分は同じで末尾のみ数字が違う場合のループ処理は、どの様に記述したら良いのでしょか?


・テキストボックスの入力値を取得する処理
・複数の値の合計を計算する処理
・テキストボックスに任意の値を表示する処理

を一度別々に考えてみます。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-02 15:05
form1.elements[i].name.substr(11, 2)

VB6で言えば
mid(form1.elements[i].name ,12 ,2)
と同じになります。
(先頭の指定が 0か 1かの違いがあります。)
この処理はidの数字の部分を取ろうとしているコードに見受けられます


多分やりたいことは
IF Left(form1.elements[i].name,10) = "sc_TextBox" Then
だと思っていたのですが、違ってました?
↑でいいのであれば、Leftをmidに変換して、midからsubstrに変換(開始位置を一個ずらす)してみてください

余談ですが.NETにもsubstringというメソッドが存在しますのでイミディエイトウィンドウなどで試してみるのもいいかもしれません。


# "sc_TextBox"+Left(sender.ID,11) はsenderに依存しますが、
# sender.IDが"abcdefghijkl"だった場合は
# "sc_TextBox"+Left(sender.ID,11) → "sc_TextBoxabcdefghijk" になりますが、その認識はあってますか?

# コードから、勝手にsc_TextBox00〜sc_TextBox99というidの振り方だと思っています。
# 違ってたらすいません。

スキルアップ/キャリアアップ(JOB@IT)