ここから本文です

解決済みの質問

知恵コレに追加する

ボタンが押される度に数字を+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>

質問した人からのコメント

  • 回答ありがとうございました。

    まさに、これです。
  • コメント日時:2009/10/7 17:32:34

グレード

この質問・回答は役に立ちましたか?
はい
いいえ

お役立ち度:お役立ち度 0点(5点満点中)0人中 0人が役に立つと評価しています。

ベストアンサー以外の回答

2件中12件)
並べ替え:回答日時の
新しい順
古い順

 

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()のような手を使うのがベスト。

回答ありがとうキャンペーン 回答してポイントを当てよう!! 2000名様に500ポイントプレゼント キャンペーンの詳細を見る ※回答することで自動的に応募となります。

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:JavaScript]

ただいまの回答者

19時05分現在

3014
人が回答!!

1時間以内に6,187件の回答が寄せられています。