• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaScriptでループできない)

JavaScriptでループが機能しない理由

このQ&Aのポイント
  • JavaScriptでユーザー生成のループが動かない原因を探ります。
  • 処理内容を見直し、ループの有効性とイベントの影響を考慮します。
  • 他の処理が正常に動く中、なぜ一回限りのループが発生するのかを解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • retorofan
  • ベストアンサー率34% (435/1276)
回答No.4

このコードを実行した時に、あなたは 「これでループしても一回しか繰り返えされません。」 とおっしゃっています。 しかし、実行されています。 では、どうしてそういう判断をされたのか? ・JavaScriptのイベント処理には非同期性が関わってくる その点が考慮されていないからです。 つまり、 「forループの中にイベント処理があった場合、  必ずしも順序どおりに実行される訳ではない」 ということです。 この問題を解決するためには、 非同期処理を適切に制御する必要があります。 このコード中の forループの部分を、次のように修正してみてください。 for (let step = 0; step < 10; step++) { setTimeout(function() { target.dispatchEvent(a); target.dispatchEvent(e); name.value = 'らき⭐︎すた' + Math.random(); pass.value = 'bbbb2' pass2.value = 'bbbb2' sakusei.dispatchEvent(a); sakusei.dispatchEvent(e);   console.log(step); }, step * 1000); このように遅延を設けることで、 各ステップが1秒間隔で確実に実行されます。

shimoshimo0204a
質問者

お礼

解決しました!ありがとうございました!

Powered by GRATICA

その他の回答 (3)

  • Kaneyan-R
  • ベストアンサー率42% (1340/3126)
回答No.3

他の方の説明通り、10回ちゃんと繰り返してますね。 ただ、これ自動クリックですよね? mouse Downとmouse Upを連続で行ってますが、プログラムって言うのは1命令あたり1ミリ秒~数ミリ秒で実行されますから、DownしてUpを数ミリ秒毎に繰り返すと言うことは、連打していることになりますね。 とすると、画面変移する前(クリックを認識して反映する前)に連打しているので、一回目しか反映されていない可能性が考えられます。 タイマー(setInterval/setTimeout)入れて、一回毎に間隔をあけるとどうなるかな?

shimoshimo0204a
質問者

お礼

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

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.2

>これでループしても一回しか繰り返えされません。なぜでしょうか? いやたぶん、10回回っています。 ただ、最後の結果しか残っていないだけだと思います。 たとえばこちら、 >pass.value = 'bbbb2' これをループを使わずに書くと、こうなります。 pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' pass.value = 'bbbb2' この結果、pass.value の中身はどうなりますか? → 一番最後の代入、'bbbb2' だけとなります。 もしこれが、「pass.value += 'bbbb2'」の繰り返しだったらどうなるでしょう。 pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' pass.value += 'bbbb2' これを実行した結果、pass.value の中身は、'bbbb2bbbb2bbbb2bbbb2bbbb2bbbb2bbbb2bbbb2bbbb2bbbb2' となるでしょう。 10回実行した結果を見てみたいなら、結果が残るように、出力方法を工夫してみましょう。

shimoshimo0204a
質問者

お礼

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

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

ループ自体は10回まわっています。 > ちなみにforの処理の中に他の処理も混ぜたら他の処理はちゃんと動きました。 とお書きの通り。 何かの現象を見て「ループしても一回しか繰り返えされません。」と推測したのでしょうけど、その推測が間違っていると言うことです。 「こういう結果を期待していたが、実際はこういう結果であった」と具体的・客観的に書くと、なぜそうなるのかを解説してくれる人がいるかも知れません。 あなたが何を見てどのように推測したのかは他人には分かりません。

shimoshimo0204a
質問者

お礼

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

関連するQ&A