2016-05-20 1 views
1

私が書いたコードの問題点を教えてください。ローカルストレージエラー

のJs

$("button").click(function() { 
      document.getElementById("demo").innerHTML = document.getElementById("asd").value; 
     }); 
     $(function() { 
      var edit = document.getElementById('demo'); 
      $(edit).blur(function() { 
       localStorage.setItem("data1", this.innerHTML) 
      }); 
      if (localStorage.getItem("data1")) { 
       edit.innerHTML = localStorage.getItem("data1"); 
      } 
     }); 

Htmlの

<input type="text" id="asd"> 
<button>asdsad</button> 
<p id="demo"></p> 

しかし、同じコードが、この中で完璧に働いている:

のJs

$(function() { 
      var edit = document.getElementById('demo'); 
      $(edit).blur(function() { 
       localStorage.setItem("data1", document.getElementById("demo").innerHTML) 
      }); 
      if (localStorage.getItem("data1")) { 
       edit.innerHTML = localStorage.getItem("data1"); 
      } 
     }); 

HTML

<div contenteditable="true" id="demo">Some text here</div> 

ここで何が問題になったか教えてください。

+0

ようこそ!あなたのコードがどのように機能しないかについて詳しく説明できますか?あなたは何を期待していましたか、実際何が起こったのですか?例外/エラーがある場合は、それが発生した行と例外/エラーの詳細を投稿してください。他のユーザーがあなたを助けることができるように、これらの詳細をあなたの投稿に[編集]してください。 –

答えて

2

DOM要素を含む変数editを引数としてjQueryに渡すと、jQueryオブジェクトが返されます。これにより、blurイベント内のthisの範囲がjQueryオブジェクトに変更されます。 jQueryはinnerHTMLのプロパティを持っていないので、undefinedを返します。 JavaScriptのDOM要素にはもちろんinnerHTMLというプロパティがあります。そのため、2番目の例が機能します。あなたの最初の例を修正する

一つの方法は、これを交換することである。これにより

$(edit).blur(function() { 
    localStorage.setItem("data1", this.innerHTML) 
}); 

:スタックオーバーフローへ

$(edit).blur(function() { 
    localStorage.setItem("data1", $(this).html()); 
}); 
+0

まだ動作しません。助けてください – Advaith

+0

もう一つの問題は、 '.blur()'イベントハンドラを段落にバインドしようとしていることです。パラグラフは、あなたがそれらとやりとりをするときに 'blur'や' focus'のようなイベントを発生させません。例外は、値が 'true'の' contenteditable'属性を持つときです。 最初のサンプルコードであなたの意図を明確にしてください。フォームの入力値を 'localStorage'に保存し、ページがリロードされたときにその内容で段落を設定しますか? – SimianAngel

+0

はい、そうです。私は段落のテキストを 'localstorage'に保存したい – Advaith