複数の計算式があります。
それぞれ、ホームページで数値を入れていって、最後に計算ボタンを押すと、計算した値が一気に出るようにしたいです。
CGIではなく、HTMLの中にJavaScriptを埋め込んで作りたいと思っています。
スクリプトの意味はよくわからないまま、とりあえず以下のソースを埋め込んでみました。
HEAD部分に
<SCRIPT LANGUAGE="JavaScript">
function calc(f){
f.z.value=eval(f.x.value)+eval(f.y.value);
}
</SCRIPT>
BODY部分に
<FORM NAME="form1">
<INPUT TYPE="text" SIZE=10 NAME="x">+
<INPUT TYPE="text" SIZE=10 NAME="y">=
<INPUT TYPE="text" SIZE=10 NAME="z"><BR>
<INPUT TYPE="button" VALUE="計算" onClick="calc(this.form)"><BR>
</FORM>
これは動きました。
でも、計算式が一つだけです。複数の式を計算させたいのですが……。
同じ感じでコピーしてxyzの文字をかえたりと幼稚な試行錯誤をしてみましたが動きませんでした。
二つ以上の計算式を埋め込むには、どんなスクリプトにすればいいのでしょうか。
たとえば、
「別の空欄に入れたaという値とbという値をかけて、先ほどのxという値を2倍したものを引き、さらに100を足す」
という計算式を追加して、でも「計算」ボタンは一個のままで済ませるには、どうすればいいでしょうか。
もしできれば、全体のスクリプトをお教えいただけるととてもありがたいです。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
ちょっと文意が読み取れていないかもしれないんですが
これでどうでしょうか?
<html>
<head><title></title>
<script language="javascript">
<!--//
function calc(f){
x = Number(f.x.value);
y = Number(f.y.value);
z = x + y;
f.z.value = z;
a = Number(f.a.value);
b = Number(f.b.value);
c = a * b - x * 2 + 100;
f.c.value = c;
}
//-->
</script>
</head>
<body>
<FORM NAME="form1">
a = <INPUT TYPE="text" SIZE=10 NAME="a"><br>
b = <INPUT TYPE="text" SIZE=10 NAME="b"><br>
x = <INPUT TYPE="text" SIZE=10 NAME="x"><br>
y = <INPUT TYPE="text" SIZE=10 NAME="y"><br>
<INPUT TYPE="button" VALUE="計算" onClick="calc(this.form)"><BR>
<hr>
z = x + y<br>
z = <INPUT TYPE="text" SIZE=10 NAME="z"><BR>
c = a * b - x * 2 + 100<br>
c = <INPUT TYPE="text" SIZE=10 NAME="c"><br>
</FORM>
</body>
</html>
>このfとかいうのの意味もよくわからなかったんですが…
端的に言うと「f」というのは「this.form」のことです。
(つまりform1のことです)
calcを呼び出す側では「onClick="calc(this.form)"」というふうに、calcの引数に「this.form」を指定していますね。
それからcalc関数の定義では、「function calc(f)」と書いています。
そのため、calc関数の内部では、「this.form」を「f」という記号で表現しても良いことになっています。
つまり、
「function calc(fff)」と記述すれば、
「fff.z.value」と書けるわけです。
もちろん
<FORM NAME="form1">のNAMEパラメータで指定したものを使って
「form1.z.value」でもOKです。
この回答への補足
うわー!感動です!!
計算式が10以上あるので、いただいたスクリプトをよいせよいせと改変し(というか部分的に増殖させ)て試行錯誤中ですが、今のところ、とてもうまくいっています。(そうかぁっ、f=this.formと定義しているところがあったんですね。)
ただ、(すんなりうまくいきかけているのでついつい欲が出てしまっているのですが、)小数点が出る範囲を下一桁までに固定する、なんてことは可能でしょうか。
No.4
- 回答日時:
すいません。
No.3の参考URLは、本件の参考としては適当ではなかったようです。
あれからネットでちょっと探してみたんですが
適当なソースがみつからなかったので、自分で作ってみました。
No.2のソースにdecimalAlignという関数を追加しています。
この関数は、decimalAlign([数値],[小数点以下桁数])という形で実行すると、小数点以下の桁数を揃えた文字列を返します。
つまり
「f.z.value = decimalAlign(z, 2);」
と記述すると「z」の値を小数点以下2桁に整形した文字列を返してf.z.valueにセットすることができます。
<html>
<head><title></title>
<script language="javascript">
<!--//
function calc(f){
x = Number(f.x.value);
y = Number(f.y.value);
z = x + y;
f.z.value = decimalAlign(z, 2);
a = Number(f.a.value);
b = Number(f.b.value);
c = a * b - x * 2 + 100;
f.c.value = decimalAlign(c, 2);
}
function decimalAlign(num, decimal)
{
decimalChar = "";
alignNumber = Math.pow(10, decimal);
result = Math.round(num * alignNumber) / alignNumber;
result_str = String(result);
for (i = 1; i <= decimal; i++) {
decimalChar += "0";
}
if (result_str.indexOf(".") != -1) {
a = result_str.split(".")[0];
b = result_str.split(".")[1] + decimalChar;
result_str = a + "." + b.substring(0, decimal);
} else {
a = result_str.split(".")[0];
if (decimal != 0) {
result_str = a + "." + decimalChar;
} else {
result_str = a;
}
}
return(result_str);
}
//-->
</script>
</head>
<body>
<FORM NAME="form1">
a = <INPUT TYPE="text" SIZE=10 NAME="a"><br>
b = <INPUT TYPE="text" SIZE=10 NAME="b"><br>
x = <INPUT TYPE="text" SIZE=10 NAME="x"><br>
y = <INPUT TYPE="text" SIZE=10 NAME="y"><br>
<INPUT TYPE="button" VALUE="計算" onClick="calc(this.form)"><BR>
<hr>
z = x + y<br>
z = <INPUT TYPE="text" SIZE=10 NAME="z"><BR>
c = a * b - x * 2 + 100<br>
c = <INPUT TYPE="text" SIZE=10 NAME="c"><br>
</FORM>
</body>
</html>
#2のスクリプトを使って、無事にページが出来ました!
小数点は難しかったのでゆっくりやろうと思い、とりあえずお礼を書き込もうと開いて#4を見つけてびっくりしました。感謝でいっぱいです。
今日、#4のほうもページに反映させて頂きます。
本当にありがとうございました。
No.3
- 回答日時:
小数点以下の桁数を揃える方法は参考URLが参考になると思いますよ。
一旦文字列として扱って、splitで「.」を境に右と左に分けてから云々。。。という処理になりそうですね。
また、計算誤差に言及するときにはこちらのURLが参考になると思います。
http://www.geocities.co.jp/SiliconValley/4334/un …
参考URL:http://www.openspc2.org/reibun/javascript/busine …
No.1
- 回答日時:
全体のスクリプトという前に、
「どういう内容の計算をするか」というのをはっきりさせておく必要があると思います。
複数の計算式を行うことはもちろん可能なのですが、
それには、解答を入力する欄がさらにもう1つ必要になります。
あと、aとbという値が任意のものであるなら、そのフォームもまた必要になります。
z2なんていうフォームを用意すれば
form1.z2.value = a * b - Number(form1.x.value) * 2 + 100;
を追加するだけでいいのではないかと。
ちなみに・・・f.z.valueじゃ動かないでしょ?
form1.z.valueでは?
この回答への補足
何故か動いています…。このfとかいうのの意味もよくわからなかったんですが…
その手のを試行錯誤で追加してみたんですが、動かなくなるのでご質問しました。
入れる位置とか、前後に他に何が必要かとかがわかりません。
form1.z2.value = a * b - Number(form1.x.value) * 2 + 100;
これはHEAD部分に挿入するのかなとは思うのですが、詳細がやっぱりわかりません。
function calc(f){
f.z.value=eval(f.x.value)+eval(f.y.value);
}
form1.z2.value = a * b - Number(form1.x.value) * 2 + 100;
なのか、
function calc(f){
f.z.value=eval(f.x.value)+eval(f.y.value);
form1.z2.value = a * b - Number(form1.x.value) * 2 + 100;
}
function calc(f){
form1.z2.value = a * b - Number(form1.x.value) * 2 + 100;
}
なのか?
一応、BODY部分にフォームは新しく作ったはずなのですが……。
ところで、ためしに
function calc(f){
f.z.value=eval(f.x.value)+eval(f.y.value);
}
を
function calc(f){
f.z.value=eval(f.x.value)+2;
}
と書き換えてみると動きませんでした。
一律に2を足すにはどうすればいいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonで会員サイトの自動ログ...
-
eval()を使わずに数値を取得し...
-
関数名などの固有名詞(?)を...
-
大量のselect要素のvalueを短い...
-
子から親へチェックボックスの...
-
マクロ オブジェクト変数With...
-
ラジオボタンのチェックが外れ...
-
クリックさせたいが、click()が...
-
特定<table>内の<td>の色を変える
-
テーブル列の表示・非表示機能...
-
テキストエリアに履歴を残したい
-
innerHTML内では改行は禁止?
-
SendKeys()が一番最後に実行さ...
-
slickのレスポンシブ > center...
-
return trueとreturn falseの用...
-
Selectボックスの一覧表示方法
-
javascriptでセレクトボックス...
-
onchangeイベントを強制的に発...
-
ボタンかリンクをクリックする...
-
プルダウン 項目が多いので先頭...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
value内に変数を入れたい
-
hiddenのvalueの値を変えたい
-
VB.NET DateTimeの型について
-
setIntervalの間隔を途中で変更...
-
javascriptでhiddenに二次元配...
-
チェックボックスがundefinedと...
-
JAVASCRIPTで、ボタンを押した...
-
フォームで入力した値を別のフ...
-
eval()を使わずに数値を取得し...
-
javascriptにてHTMLのhiddenエ...
-
複数のsubmitボタンで押された...
-
テキストボックスに入力された...
-
フォーカスすると初期値が消去...
-
ホームページビルダーのスクリ...
-
UART通信の取説で,left floati...
-
Pythonで会員サイトの自動ログ...
-
3桁区切りのカンマをつけたい...
-
どのボタンがクリックされたの...
-
値を初期化したい。
-
他フォームの入力データの引継ぎ
おすすめ情報