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

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

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

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

Q&A

解決済

2回答

810閲覧

JavaScript クッキーの保存について

MUSUBINON

総合スコア11

JavaScript

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

0グッド

0クリップ

投稿2022/10/03 03:21

前提

XAMPPをダウンロードし、「localhost」を使用しWebプラウザで表示したのですが、クッキーの読み込み、保存が上手くいきません。

実現したいこと

リロードしても前回入力した情報が再現されるようにしたいです。

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

Uncaught TypeError: Cannot set properties of null (setting 'innerHTML)

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>10日で覚えるJavaScript</title> <style> #wrapper{width: 380px;} ul{list-style-type: none; background: gold; padding: 4px;} </style> <script> window.addEventListener('load', function(event){ loadCookie(); var elem = document.getElementById('txt_name'); elem.addEventListener('change', saveCookie, false); elem = document.getElementById('txt_mail'); elem.addEventListener('change', saveCookie, false); } ,false); //クッキー読み込み function loadCookie(event){ var str = document.cookie; if(!str) return; document.getElementById('output').innerHTML= str; var sp1 = str.split(';'); for(var i=0; i<sp1.length; i++){ var s = sp1[i].replace(/\s/,' '); var sp2 = s.split('='); document.getElementById(sp2[0]).value= unescape(sp2[1]); } } //クッキー保存 function saveCookie(event){ var elem = event.currentTarget; document.cookie = elem.id + '=' + escape(elem.value); } </script> </head> <body> <div id="wrapper"> <h1>自動記憶</h1> <ul> <li><input type="text" id="txt_name" value="お名前"></li> <li><input type="text" id="txt_mail" value="メールアドレス"></li> </ul> </div> </body> </html>

試したこと

//クッキー読み込みの所にある(!str)の!を消したら、エラーは消えましたが、クッキーは保存されませんでした。

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

Visual Studio Code

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

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

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

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

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

Cocode

2022/10/03 03:32 編集

クッキー読み込みと保存の関数も window.addEventListener('load', function(event){ } の中にいれても無理そうですか? 一度確認お願いします🙇‍♀️ --- ごめんなさい関係ないです。無視してください!ちゃんと見てからまた回答します。
MUSUBINON

2022/10/03 03:34

質問ありがとうございます。 申し訳ございませんがよろしくお願いいたします。
guest

回答2

0

ベストアンサー

outputというIDのついた要素がないのでエラーが出ているので用意しましょう。
ただ、保存するための目的だけならcookieではなくLocalStorageとかsessionStorageを使いましょう。

【LocalStorage, sessionStorage】
https://ja.javascript.info/localstorage

【【サンプル付き】Local Storageとは?使い方を詳しく解説|webliker(ウェブライカー)】
https://webliker.info/web-skill/how-to-use-localstrage/

【ブラウザにデータを保存するlocalStorage(ローカルストレージ)の使い方 | 株式会社グランフェアズ】
https://www.granfairs.com/blog/staff/local-storage-01

投稿2022/10/03 03:29

編集2022/10/03 03:29
kei344

総合スコア69364

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

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

MUSUBINON

2022/10/03 03:40

回答ありがとうございます。 'output'のIDのついた要素がないとのことですが、どのように作ればいいのでしょうか? まだ、独学で勉強を始めたばかりなので、分からないことだらけなので、質問ばかりで申し訳ございませんが、教えて頂けたら幸いです。
kei344

2022/10/03 04:04

<div id="output"></div> とか作ればよいです。 なるべく新しい入門書を数冊買って基礎を固めるほうが良いと思います。 エラーが出たときの対処や開発環境の整え方がかかれたものを探してみてはいかがでしょう。
guest

0

エラーの原因、対策はkei344様のおっしゃる通りなので、そちらを参考に&ベストアンサー候補にしてください。
エラーの探し方だけご案内させてください。

エラーの探し方

今回私はcookie.htmlというファイル名にしてブラウザで開き、コンソールで確認しました。

イメージ説明
すると、エラーの右上にcookie.html:33と書いてあります。
これは「cookie.htmlというファイルの33行目でエラーが発生した」という意味です。
リンクになっているのでそれをクリックしてみます。

イメージ説明

コンソール内で、cookie.htmlのファイルが表示され、エラーの該当箇所がハイライトされています。
そして、英語がわからない場合、エラー文を翻訳機で翻訳します。

Cannot set properties of null (setting 'innerHTML')
--- null のプロパティを設定できません (「innerHTML」を設定)

プロパティがnullだから.innerHTMLができなくてエラーが起きているようです。

「プロパティ」ってなんなのかよく分からない…と思われますが、
少なくとも、そこで代入しようとしている右辺の= str;は、値とかValueとか表現されると思うので、これはプロパティじゃない。

なので左辺を見てみても、文法上のミスはなさそう。
ということは、怪しいのはプログラムを書く人が自由にかける'output'かな?
(他のdocumentとか.getElementByIdとかは決められた文言をそのまま書いているだけで、outputの部分は自由記入なので)

という感じで見つけられます!
お節介失礼しました。

投稿2022/10/03 03:51

編集2022/10/03 03:59
Cocode

総合スコア2314

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問