前提・実現したいこと
javaScriptでローカルストレージの保存と取得をしたい。
発生している問題・エラーメッセージ
クリックボタンで実行するはずが、無反応です。
該当のソースコード
javaScript
1<!DOCTYPE html> 2 3<html> 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>Sample</title> 7 <style> 8 h1 {font-weight:bold; color:#999; padding:3px; } 9 body { font-size:14pt; color:#666; } 10 </style> 11</head> 12<body onload="init();"> 13 <h1>Hello!</h1> 14 <p id="msg"></p> 15 <input type="text" id="txt1"> 16 <button onclick="clickBtn();">Click</button> 17 <script src="sample.js"></script> 18</body> 19</html>
//sample.js function init() { //id='txt'のDOMを得る var txt = document.getElementById( 'txt1' ); //保存した値を取り出す var str = localStorage.getItem('msg'); //id='msg'のDOMを得る var msg = document.getElementById( 'msg' ); //テキストをDOMのコンテンツに設定 msg.textContent = 'メッセージ:「' + str + '」'; } function clickBtn() { // id='txt'のDOMを得る var txt = document.getElementById( 'txt1' ); localStorage.setItem( 'msg', txt.value ); //valueを使ってメッセージを作成 var result = ' メッセージ:「 ' + txt.value + ' 」を保存しました。 '; // id='msg'のDOMを得る var msg = document.getElementById( 'msg' ); //テキストをDOMのコンテンツに設定 msg.textContent = result; //入力フィールドを空にする txt.value = ' '; }
試したこと
ブラウザはChrome、IEで試しました。
localStorage.setItem( 'msg', txt.value )で取得できていない事まで解りました。
なぜ取得できないのかが解りません。
補足情報(FW/ツールのバージョンなど)
現象再現しません。setItemで値の保存、getItemで値の取得、ですが、ボタンを押して保存した情報は、次のアクセス時(F5画面更新でOK)に前に保存した情報が表示されるので、正常に保存と取得ができています。
回答ありがとうございます。再度、試してみましたが、次のアクセス時(F5画面更新)に保存した情報が表示されませんでした。エラー内容は「SCRIPT5007: 未定義または NULL 参照のプロパティ 'setItem' は取得できません index.html (15,2)」でした。
もし何かしらの原因があるとすれば教えてください。
<script src="sample.js"></script> を </body>の直前に持ってきては?
setItem側にエラーが出るのでそもそも保存時にこけているということになります。
DOCTYPEで互換モードに切り替わっている可能性も考えられます。特に必要がないなら、HTML5の<!DOCTYPE html>だけにしましょう。
ただ、現在の位置にsample.jsの読み込み記述を書いても現象再現しなかったので、回答にあるとおりブラウザの関係かもしれません。IE11では再現しました。
本件とは関係ないですけど、 cssに「front-size」という指定はないので修正しておいてください。
ありがとうございます。ご指摘頂いた内容は修正しました。
コード修正されたようですが、私のコメントは「<body>の直前」ではなく「</body>の直前」です。この質問の回答で解説がされています。→https://teratail.com/questions/14600
失礼しました。修正しました。また、解説ありがとごうざいます。
回答3件
あなたの回答
tips
プレビュー