質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

5512閲覧

ブラウザが固まってしまう

yuh_yo

総合スコア15

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/02/10 14:16

編集2020/02/10 15:33

ブラウザがフリーズします。その原因や理由を知りたいです。
また、何か記述等でアドバイスがあると幸いです。

下記のHTMLファイルを作成しました。(ソースをのせました。失礼しました。)

HTML

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 2 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml"> 4<head> 5 <title></title> 6 7 <script language="javascript" type="text/javascript"> 8 function OnButtonClick() { 9 var hoge = Sample_form.output.value; 10 target = document.getElementById("output"); 11 var date = time(); 12 target.insertAdjacentHTML('beforeend', date +'<br>'+ hoge + '<br>'); 13 14 } 15 16 function time(){ 17 var now = new Date(); 18 /*setInterval('time()',1000);*/ 19 return now.toLocaleTimeString() +" " + now.toLocaleString(); 20 21 } 22 23 </script> 24 25</head> 26<body> 27<form name="Sample_form" action=""> 28<p>かきこみ内容<br> 29<input type="text" name="output"></p> 30<input type="button" value="Exec" onclick="OnButtonClick()";/><br /> 31</form> 32 33<div id="output"></div> 34<div id="br"></div>: 35 36<h1>一番下</h1> 37 38</body> 39</html>

フォームに入力した情報はボタンを押すと、フォームの下に時刻とともに表示されます。
作成したHTMLファイルをブラウザで開き、ボタンを押して、しばらくするとフリーズしてしまいます。
どうやら、/setInterval('time()',1000);/が原因のようです。
なぜ、フリーズしてしまうのか、理由を知りたいです。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/02/10 14:17

再現するコードをご提示ください。 この内容だけでは何一つアドバイスに必要な情報がありません。
kei344

2020/02/10 14:19

書かれている状況が再現するコード(HTML/JavaScript)を質問文に追記されたほうが回答を得やすいと思います。
yuh_yo

2020/02/10 14:19

m.ts10806様、ありがとうございます。後程、自分で作成したHTMLファイルのソースを載せます。失礼しました。
yuh_yo

2020/02/10 14:20

kei344様、ありがとうございます。後程、自分で作成したHTMLファイルのソースを載せます。失礼しました.
kei344

2020/02/10 15:30

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
yuh_yo

2020/02/10 15:34

kei344様、ありがとうございます。 このような便利な機能があるとは知りませんでした。 大変勉強になります。
guest

回答1

0

ベストアンサー

どうやら、/setInterval('time()',1000);/が原因のようです。

なぜ、フリーズしてしまうのか、理由を知りたいです。

setIntervalは指定ミリ秒毎に関数を実行します。
0. クリックでtime()が実行される
0. その中でsetIntervalで毎秒time()を実行するように登録
0. 1秒後にまたsetIntervalで毎秒time()を実行するように登録
0. その1秒後にまたsetIntervalで毎秒time()を実行するように登録
0. (以下略)

1回だけならsetTimeoutを使えばよいです。
ちなみに、setTimeout( 'time()', 1000 )と登録するのではなく、setTimeout( time, 1000 )と登録しましょう。

【WindowOrWorkerGlobalScope.setTimeout() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/WindowTimers/setTimeout

投稿2020/02/10 15:37

kei344

総合スコア69606

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

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

yuh_yo

2020/02/11 07:09

kei344様、解説ありがとうございます。 明確な原因と理由がわかり、大変すっきりしました。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問