🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

518閲覧

テキストボックスの内容を数秒毎に一文字ずつ表示したい。

guchinooo

総合スコア4

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/10 02:17

前提・実現したいこと

テキストボックスに文字を入力しボタンを押すと、
入力した文字が2秒ごとに先頭から1文字ずつ順番に表示されるプログラムを作成したいです。

発生している問題・エラーメッセージ

★for文 のところで【parsing error unexpected token】 とエラーが出ているのですが、どこが間違えているのかが分かりません。 また、プロパティなどあまりまだ慣れておらず、 こんな使い方はしない、というものもあるかと思いますので、ぜひ教えていただけると嬉しいです。

該当のソースコード

javascript

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>課題</title> 6 <script> 7 var add = document.getElementById("add"); 8 9 function showing_pg() { 10 var text = document.getElementById("text.value"); 11for (var i = 0, i < text.length, i++) { 12 var result = text.substring(i); 13 add.innerHTML = result; 14 } 15 } 16 window.onload = function() { 17 var count_time = setInterval(showing_pg,2000); 18 count_time.addEventListener("click", count_time, false); 19 } 20 21 </script> 22 </head> 23 <body> 24 <input type="text" name="text" id="text"> 25 <button id="button">一文字ずつ表示</button> 26 <div id="show"></div> 27 </body> 28</html> 29

補足情報(FW/ツールのバージョンなど)

エディタはcloud9を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

javascript

1for (var i = 0, i < text.length, i++) {

2つある ,; にしてください。


ついでですが、

javascript

1 var text = document.getElementById("text.value");

これだと、text は文字列ではなく null になると思います。HTML 中に id="text.value"を持つ要素がないので。
欲しい物は document.getElementById("text").value ではないでしょうか。


「1文字づつ表示」にもなってないですね。

js

1 var count_time = setInterval(showing_pg,2000); 2 count_time.addEventListener("click", count_time, false);

addEventListener()を呼びたい対象はボタンのはずです。setInterval()から得たタイマーIDはaddEventLisetner()という関数を持ちません。
addEventListener()に渡すのは実行したい関数です。setInterval()から得たタイマーIDを渡してはいけません。

まず、グローバルに countTimershownLength という変数を宣言しましょう。
「ボタンを押すと、…2秒ごとに先頭から…」という仕様を以下のようなコードで実現します。

js

1document.getElementById("button").addEventListener("click", () => { 2 // 2秒ことに 3 countTimer = setInterval(showing_pg, 2000); 4 // 次は先頭から1文字だけ表示する 5 shownLength = 1; 6}, false);

showing_pg()でやることは、「入力した文字列のうち、先頭 shownLength 文字だけ表示する」「showLength を1増やす」「showLengthtext.length を超えたら、繰り返しタイマーを停止する」です。for は不要です。


async/awaitを使った同期的な書き方や、bind()setTimeout()を使ったグローバル変数なしの書き方もありますが、初学者向けではないので省略します。

投稿2021/03/10 02:20

編集2021/03/11 00:50
int32_t

総合スコア21679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guchinooo

2021/03/10 23:08

ご回答ありがとうございます! for文忘れておりました・・ありがとうございます。 input要素の値を取り出したいときはvalueを使う?と良いと見たのですが、カッコの外に出してあげればよかったんですね・・・ substringで文字列の切り出しができるとの事だったのですが、使い方が違いますか?・・・迷子状態で申し訳ないです・・・
int32_t

2021/03/11 00:17

substring()を使うのは合ってます! でもforで「2秒待つ」なしで繰り返しinnerHTMLを更新しているので、けっきょく目に見えるのは最後のinnerHTML更新である text.substring(text.length-1) (最後の1文字) だけになると思います。 改善案を回答に追記しました。
guchinooo

2021/03/11 12:01

確かに冷静に考えればfor文をここで入れるとおかしくなるのも・・・納得ですね・・・ 改善案までご丁寧にありがとうございます! 頂いた改善案とsubstringメソッドを少し手直ししたら理想のプログラムに辿り着けました!ネット検索だともっと分からないプロパティ・メソッド・専門用語?だらけで撃沈しておりましたので大変感謝しています。。。本当にありがとうございました<m(__)m>
guest

0

色々違う気がするのだけども、他の人も突っ込んでくれると思うので一つだけ。

script

1var add = document.getElementById("add");

id="add"は見当たらないので、showにした方が良いかなと思う。

投稿2021/03/10 03:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guchinooo

2021/03/10 15:16

ほんとでした(-_-;) ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問