http://jsajax.com/Articles/TableInsertRow/157を参考に、[行を挿入]ボタンをクリックすると最終行の下に行が追加され、その中にテキストボックスを配置し計算を行うようにしたいと思い、下記のソースを記述しました。
そして追加した行で正常に計算を行うために、insertRow内のinnerHTMLのgoods_a_3の3の部分を動的に設定したり、calc内の計算式を動的にループさせる必要があると思ったのですが、どのように記述すれば良いか分からなかったため、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。
<script type="text/javascript">
<!--
window.onload = function() {
document.getElementById("btnInsert").onclick = insertRow;
}
function insertRow() {
var tbl = document.getElementById("Table1");
var row = tbl.insertRow(2);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = "<input type=\"text\" name=\"goods_a_3\" size=\"3\" value=\"0\" onchange=\"calc();\" />*";
cell2.innerHTML = "<input type=\"text\" name=\"goods_b_3\" size=\"3\" value=\"0\" onchange=\"calc();\" />=";
cell3.innerHTML = "<input type=\"text\" name=\"ans3\" size=\"8\" value=\"0\" disabled=\"disabled\" />";
}
function calc(){
document.form1.ans1.value = document.form1.goods_a_1.value * document.form1.goods_b_1.value;
document.form1.ans2.value = document.form1.goods_a_2.value * document.form1.goods_b_2.value;
}
// -->
</script>
</head>
<body>
<form action="#" name="form1" id="form1">
<table id="Table1" border="1">
<tr>
<td><input type="text" name="goods_a_1" size="3" value="0" onchange="calc();" />*</td>
<td><input type="text" name="goods_b_1" size="3" value="0" onchange="calc();" />=</td>
<td><input type="text" name="ans1" size="8" value="0" disabled="disabled" /></td>
</tr>
<tr>
<td><input type="text" name="goods_a_2" size="3" value="0" onchange="calc();" />*</td>
<td><input type="text" name="goods_b_2" size="3" value="0" onchange="calc();" />=</td>
<td><input type="text" name="ans2" size="8" value="0" disabled="disabled" /></td>
</tr>
</table>
</form>
<br />
<input id="btnInsert" type="button" value="行を挿入" />
以上、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
たとえばこんな風にするとかでしょうか。
<script type="text/javascript">
<!--
window.onload = function() {
document.getElementById("btnInsert").onclick = insertRow;
}
function insertRow() {
var tbl = document.getElementById("Table1");
//最終行をテーブルの行数から判断するようにする
var len = tbl.rows.length;
var row = tbl.insertRow(len);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
//nameを動的に設定、calcの引数に自オブジェクトを設定するようにする
cell1.innerHTML = "<input type=\"text\" name=\"goods_a_" + (len+1) +"\" size=\"3\" value=\"0\" onchange=\"calc(this);\" />*";
cell2.innerHTML = "<input type=\"text\" name=\"goods_b_" + (len+1) +"\" size=\"3\" value=\"0\" onchange=\"calc(this);\" />=";
cell3.innerHTML = "<input type=\"text\" name=\"ans" + (len+1) + "\" size=\"8\" value=\"0\" disabled=\"disabled\" />";
}
//引数を追加
function calc(inputObj) {
// formを取得
var frm = inputObj.form;
// nameの数字部分を取得(とりあえず桁数で決め打ち)
var id = inputObj.name.substring(8);
// 計算
frm.elements['ans' + id].value = frm.elements['goods_a_' + id].value * frm.elements['goods_b_' + id].value;
}
// -->
</script>
</head>
<body>
<form action="#" name="form1" id="form1">
<table id="Table1" border="1">
<tr>
<td><input type="text" name="goods_a_1" size="3" value="0" onchange="calc(this);" />*</td>
<td><input type="text" name="goods_b_1" size="3" value="0" onchange="calc(this);" />=</td>
<td><input type="text" name="ans1" size="8" value="0" disabled="disabled" /></td>
</tr>
<tr>
<td><input type="text" name="goods_a_2" size="3" value="0" onchange="calc(this);" />*</td>
<td><input type="text" name="goods_b_2" size="3" value="0" onchange="calc(this);" />=</td>
<td><input type="text" name="ans2" size="8" value="0" disabled="disabled" /></td>
</tr>
</table>
</form>
<br />
<input id="btnInsert" type="button" value="行を挿入" />
入力文字の数値チェックとかをしていませんが、参考になれば幸いです。
ご回答ありがとうございます。
ご教示いただいたソースを試したところ、意図した動作となりました。
このたびはどうもありがとうございました。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Formのシリアライズができない
-
複数のselect値で1つも選択され...
-
javascriptで表(テーブル)の自...
-
return trueとreturn falseの用...
-
追加ボタンを押した際に ok ボ...
-
チェックボックスのON/OFFでVal...
-
<form action="#">の意味とは?
-
jQuery セレクトボックスで選択...
-
フォームが空欄の時にフォーム...
-
【jQuery】input nameの文字列...
-
新しくフォルダを作成したい
-
javascriptの値をformのinput h...
-
正規表現で複数マッチ条件で悩...
-
マイナスなら赤字で表示したい...
-
チェックボックスの設定
-
ラジオボタンでポップアップメ...
-
javascriptで画像の移動
-
特定<table>内の<td>の色を変える
-
テーブルで複数行をまとめて非...
-
子ウィンドウを閉じるとき、親...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptの「.querySelectorA...
-
複数のselect値で1つも選択され...
-
チェックボックス付きのテーブ...
-
ラジオボタンが選択されたらテ...
-
入力チェックの外部スクリプト...
-
Javascriptの電卓で最初の何も...
-
文字数を数える際に空白、改行...
-
画面の2重起動をチェックする...
-
画面表示とともにtableの指定の...
-
jQueryで合計を出したい
-
localStorageでのcheckbox制御
-
JavaScriptによる自動計算フォーム
-
同一nameの input type="text"...
-
テーブル内のチェックボックス...
-
formで項目を連結したい
-
クリックしたラジオボタンの行...
-
Javascriptで自動計算の合計の...
-
ラジオボタンを一括で操作する...
-
送信ボタン連打を抑止したいです
-
ボタン押下すると一行テキスト...
おすすめ情報