解決済みの質問

ボタンが押される度に数字を+1していきたいのですが、
この時if()else{}で、分岐...
mayuki_nagisaさん
ボタンが押される度に数字を+1していきたいのですが、
この時if()else{}で、分岐させようとしたのですが、
ボタンの連続処理ができません。
何か指定しないと連続でjavascriptの動作ができないのでしょうか?
連続で押すには、どこをどう直せば可能になるのでしょうか?
<html>
<script type="text/javasrip">
function sample() {
var count = parseInt(test.atai2.value); //文字列を整数に変換
if(count == 0) {
document.getElementById('hoge').innerHTML = "testA";
test.atai2.value = String(count+1);
}else if(count == 1) {
document.getElementById('hoge').innerHTML = "";
document.getElementById('hoge').innerHTML = "testB";
test.atai2.value = String(count+1); //整数を文字列に変換
}
}
</script>
<body>
<form name="test">
<input type="text" name="atai" value="0"><br>
<input type="text" name="atai2" value=""><br>
<input type="button" value="つぎへ" onClick="review1()">
</form>
</body>
</html>
結果:
buttonをクリック(1回目)↓
testA表示
↓
buttonをクリック(2回目)
動作不可
宜しくお願いします。
違反報告
ベストアンサーに選ばれた回答
mereitboyさん
押されるたびに +1 するのであれば、
} else if (count >= 1) { とする必要があります。
また連続で押すが、素早く2回押すの意味であれば、
onDblClick="sample()" を追加すれば処理されます。
<html>
<script type="text/javascript">
function sample() {
var count = parseInt(document.forms.test.atai2.value);
if(count == 0) {
document.getElementById('hoge').innerHTML = "testA";
document.forms.test.atai2.value = String(count+1);
}else if(count >= 1) {
document.getElementById('hoge').innerHTML = "";
document.getElementById('hoge').innerHTML = "testB";
document.forms.test.atai2.value = String(count+1);
}
}
</script>
<body>
<form name="test">
<input type="text" name="atai" value="0"><br>
<input type="text" name="atai2" value="0"><br>
<input type="button" value="つぎへ" onClick="sample()" onDblClick="sample()">
</form>
<div id="hoge"></div>
</body>
</html>
- この質問・回答は役に立ちましたか?
- はい
- いいえ
お役立ち度:
0人中 0人が役に立つと評価しています。
ベストアンサー以外の回答
- (2件中1〜2件)
ttt_0918さん
<script type="text/javasrip">
text/javasrip?動作しないかも。
<input type="button" value="つぎへ" onClick="review1()">
review1なんて関数はどこにも書いていない。エラーになる。
<form name="test">
form要素にはaction属性が必須。
<input type="text" name="atai" value="0">
このテキストボックスには何の意味が?
ユーザーとしては、2つのテキストボックスを見せられたら、どちらへ入れたらいいことやら分からない。
document.getElementById('hoge').innerHTML = "testA";
hogeのidを持つelementはない。
ちなみに「動作不可」ではなく「テキストボックスのvalueが変わらない」としか言えない。
ためしに関数の最初にalert("test");と入れれば動作していることが分かるだろう。
document.getElementById('hoge').innerHTML = "";
document.getElementById('hoge').innerHTML = "testB";
二重に書く必要はない。2行目で充分。
というわけで本題へ。
「何がやりたいのか」という具体的なことが示されていないため、具体的なアドバイスは出来ない。
count==0と、count==1の場合しか書いていないから、1回か2回かで終わる。
地道な作業だがcount==2、count==3、・・・、と書き連ねるか、「<」「<=」「>」「>=」などの演算子を使う。
地道な作業は時間と労力と通信料などの無駄だから全くお奨めできない。
まずは具体的に何がやりたいのか。
0だったらtestA、1だったらtestB、2だったらtestC、…、としたいのか、
0だったらtestA、1以上はtestBとしたいのか、
どちらでもないのか。
そこが知りたい。
nicolish_nicolishさん
<html>
<script type="text/javascript">
function sample() {
var count = parseInt(document.forms.test.atai2.value); //文字列を整数に変換
if(count == 0) {
document.getElementById('hoge').innerHTML = "testA";
document.forms.test.atai2.value = String(count+1);
}else if(count == 1) {
document.getElementById('hoge').innerHTML = "";
document.getElementById('hoge').innerHTML = "testB";
document.forms.test.atai2.value = String(count+1); //整数を文字列に変換
}
}
</script>
<body>
<div id="hoge"></div>
<form name="test">
<input type="text" name="atai" value="0"><br>
<input type="text" name="atai2" value="0"><br>
<input type="button" value="つぎへ" onClick="sample()">
</form>
</body>
</html>
関数名が違う。JavaSripってなんだ、すべるのか。hogeというIDを持つ要素がない。質問する際にヤバい情報が漏洩しないよう書き換えるのは仕方ないが、せめて動作確認してから質問しろ。
文法的には、atai2の中身が空文字列の時にparseIntしているのが間違い。空文字列を数値として解釈した場合、0ではなくNaN(数字ではない/無効な数字)になるのが正しい。1回目のクリックで動くのはブラウザのバグ。
あと、testという名前のエレメントにアクセスするのにtestと書くのは望ましくない。というか動作しない事が多い。参考にしてるのが本なら捨てたほうがいいし、webサイトなら管理者を適当に罵倒して他のサイトを探したほうがいい。このコードのようにdocumentから辿っていくのが最低ラインの妥協点。getElementById()のような手を使うのがベスト。
-

質問した人からのコメント
まさに、これです。