[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
質問
HTMLとJavascriptのコードは次のとおりです。
HTMLです。
<div id="Night" style="display: none;">
<img src="Img/night.png" style="position: fixed; top: 0px; left: 5%; height: auto; width: 100%; z-index: -2147483640;">
<img src="Img/moon.gif" style="position: fixed; top: 0px; left: 5%; height: 100%; width: auto; z-index: -2147483639;"></div>
JavaScriptです。
<script language="JavaScript">
<!--
document.write("<dl><dd>")
day = new Date()
hr = day.getHours()
if ((hr==1)||(hr==2)||(hr==3)||(hr==4) || (hr==5)) document.write("Should not you be sleeping?")
if ((hr==6) || (hr==7) || (hr==8) || (hr==9) || (hr==10) || (hr==11)) document.write("Good Morning!")
if ((hr==12)) document.write("Let's have lunch?")
if ((hr==13) || (hr==14) || (hr==15) || (hr==16) || (hr==17)) document.write("Good afternoon!")
if ((hr==18) || (hr==19)) document.write("Good late afternoon!")
if ((hr==20)) document.write("Good Night"); document.getElementById('Night').style.display=''
if ((hr==21)) document.write("Good Night"); document.getElementById('Night').style.display='none'
if ((hr==22)) document.write("Good Night")
if (hr==23) document.write("Oh My! It's almost midnight!")
if (hr==0) document.write("Midnight!<br>It is already tomorrow!") document.write("</dl>")
//--->
</script>
次の行でエラーが発生します。
if ((hr==20)) document.write("Good Night"); document.getElementById('Night).style.display=''
以下のようなエラーが発生しました。
Uncaught TypeError: Cannot read property 'style' of null at Column 69
解決方法は?
スクリプトの中の、この部分。
document.getElementById('Noite')
を返さなければなりません。
null
を設定しようとしており、さらに
display
プロパティに無効な値を設定する必要があります。この最初の部分には、いくつかの理由が考えられます。
null
.
-
ドキュメントが読み込まれる前にスクリプトを実行しすぎているので
Noite
の項目が見つかりません。 -
はありません。
Noite
という項目がHTMLに含まれています。
を使用していることを指摘しておきます。
document.write()
この場合、おそらく問題があることを意味しています。もしドキュメントがすでに読み込まれているのであれば、新しい
document.write()
は古い内容をクリアし、新しいドキュメントを開始するので
Noite
の項目は見つかりません。
ドキュメントがまだ読み込まれておらず、そのために
document.write()
インラインで HTML を現在のドキュメントに追加する場合、ドキュメントがまだ完全に読み込まれていないため、おそらく
Noite
という項目があります。
解決策としては、スクリプトのこの部分をドキュメントの一番最後に配置し、それ以前のものがすでに読み込まれているようにすることでしょう。ですから、この部分をボディの最後に移動してください。
document.getElementById('Noite').style.display='block';
そして、その中に
document.write()
文は、ドキュメントが読み込まれた後に、javascript で使用されます (前のドキュメントをクリアして、新しいドキュメントを開始するため)。
さらに
display
プロパティを
"display"
は意味をなさない。そのための有効なオプションは
"block"
,
"inline"
,
"none"
,
"table"
などなど・・・。という名前のオプションは知りません。
"display"
というスタイルプロパティがあります。参照
ここで
の有効なオプションは以下の通りです。
display
プロパティを指定します。
このデモでは、修正されたコードの動作を確認することができます。 http://jsfiddle.net/jfriend00/yVJY4/ . このjsFiddleは、javascriptがドキュメントボディの最後に配置されるように設定されているため、ドキュメントが読み込まれた後に実行されます。
P.S.
if
また、同じ行に複数のステートメントが含まれているため、あなたのコードは非常に誤解を招きやすく、不明瞭です。
何を質問されているのか理解するのにとても苦労しているのですが、あなたのコードのクリーンアップ版が動作しているのをここで見ることができます。 http://jsfiddle.net/jfriend00/QCxwr/ . 以下は、私が行った変更の一覧です。
- スクリプトはボディに配置されますが、参照するコンテンツの後に配置されます。
-
を追加しました。
var
の宣言を変数に追加します (常に使用する良い習慣です)。 -
その
if
文は if/else に変更され、より効率的で、何をやっているのかがわかるようになりました。 -
に対して中括弧を追加しました。
if
の一部であることを明確にするためです。if/else
で、どれがそうでないのか。 -
をきちんと閉じています。
</dd>
タグを挿入していましたね。 -
を変更しました。
style.display = '';
からstyle.display = 'block';
. - すべての文の最後にセミコロンを付けました(これも良い習慣です)。
コードです。
<div id="Night" style="display: none;">
<img src="Img/night.png" style="position: fixed; top: 0px; left: 5%; height: auto; width: 100%; z-index: -2147483640;">
<img src="Img/moon.gif" style="position: fixed; top: 0px; left: 5%; height: 100%; width: auto; z-index: -2147483639;">
</div>
<script>
document.write("<dl><dd>");
var day = new Date();
var hr = day.getHours();
if (hr == 0) {
document.write("Meia-noite!<br>Já é amanhã!");
} else if (hr <=5 ) {
document.write(" Você não<br> devia<br> estar<br>dormindo?");
} else if (hr <= 11) {
document.write("Bom dia!");
} else if (hr == 12) {
document.write(" Vamos<br> almoçar?");
} else if (hr <= 17) {
document.write("Boa Tarde");
} else if (hr <= 19) {
document.write(" Bom final<br> de tarde!");
} else if (hr == 20) {
document.write(" Boa Noite");
document.getElementById('Noite').style.display='block';
} else if (hr == 21) {
document.write(" Boa Noite");
document.getElementById('Noite').style.display='none';
} else if (hr == 22) {
document.write(" Boa Noite");
} else if (hr == 23) {
document.write("Ó Meu! Já é quase meia-noite!");
}
document.write("</dl></dd>");
</script>
関連
-
親子コンポーネント通信を解決する3つのVueスロット
-
vueディレクティブv-bindの使用と注意点
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] JavaScript でオブジェクトが特定のプロパティを持つかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] JavaScriptはオブジェクトのプロパティの順序を保証するか?
-
[解決済み] Javascriptオブジェクトの最初のプロパティにアクセスする方法は?
-
[解決済み] React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptの関数この指摘の問題を説明
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
JavaScriptのgetElementById()メソッド入門