関数 数値化?

[新着] Webテンプレートを仮オープンしました



0   名前: 匿名希望 : 2006/02/21 00:40
はじめまして。JavaScriptで困っています。
Scriptの先輩方、教えてください。

まず、私が困っている内容は、
計算を行って一度出力したものを
再び、UP関数で1加えるという計算をし、
出力を上書きするというところです。

一度出力するところまでは正常に動くのですが、
UP関数を使うときに+1ずつ足していくときに
「5」→「8」にしたいとします。
しかし、「5」→「5111」
となってしまいます。

=================================
function UP_A(){

if(document.ABI.abilityA.value > 0) {
document.ABI.ability1.value = document.ABI.ability1.value + 1;
document.ABI.abilityA.value = document.ABI.abilityA.value - 1;
}

if(document.ABI.abilityA.value > 20) {
document.ABI.ability2.value = document.ABI.ability2.value - 1;
document.ABI.ability3.value = document.ABI.ability3.value - 1;
}

}


function UP_B(){

if(document.ABI.abilityB.value > 0) {
document.ABI.ability2.value = document.ABI.ability2.value + 1;
document.ABI.abilityB.value = document.ABI.abilityB.value - 1;
}
}

==================================

<table border=1>
<form name="ABI">
<td>
A
</td>
<td>
<input type=text size=10 name=ability1>
</td>
<td>
A+
</td>
<td>
<input type=text size=10 name=abilityA>
</td>
<td>
<input type="button" value="UP" onclick="UP_A()">
</td>
<tr>
<td>
B
</td>
<td>
<input type=text size=10 name=ability2>
</td>
<td>
B+
</td>
<td>
<input type=text size=10 name=abilityB>
</td>
<td>
<input type="button" value="UP" onclick="UP_B()">
</td>
<tr>
<td>
<input type="button" value="計算" onclick="keisan()">
</td>
</td>
</form>
</table>

1   名前: m035 : 2006/02/21 00:40  [URL
document.ABI.ability1.value = document.ABI.ability1.value + 1;

document.ABI.ability1.valueが1のとき
document.ABI.ability1.value = 1 + 1;
ではなく、
document.ABI.ability1.value = "1" + 1;
となって、文字列+数値は数値を文字とみなし、
document.ABI.ability1.value = "1"+"1";
と同じ結果になるわけです。
これら(フォーム内の数値)が文字列として扱われているために起こります。
document.ABI.ability1.value++;
document.ABI.ability1.value--;
とすればインクリメント/デクリメント(対象は数値)なので数値として変換されるのでうまく行くはず。
または、
document.ABI.ability1.value=eval(document.ABI.ability1.value)+1;
document.ABI.ability1.value=eval(document.ABI.ability1.value)-1;
とする。
こうすると、1は数値として確実に加算されます。
evalで文字列が数値として扱われますから、数値に変換できるわけです。

2   名前: 匿名希望 : 2006/02/21 00:40
できました!
evalを用いることで数値とみなすのですね。
また、+1、−1の場合は
++、−−で表記できることを知り、
大変勉強になりました。
ご丁寧に初心者でも分かりやすい説明を
ありがとうございました!

一覧へ戻る