2016-05-20 17 views
1

Bitte jemand sagen mir, was ist das Problem in dem Code, den ich geschrieben habe.Lokaler Speicherfehler

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> 

Aber der gleiche Code funktioniert perfekt in diese:

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> 

Bitte sagen Sie mir, was hier schief gelaufen ist.

+0

Willkommen bei Stack-Überlauf! Können Sie näher erläutern, wie Ihr Code nicht funktioniert? Was hast du erwartet und was ist eigentlich passiert? Wenn Sie eine Ausnahme/einen Fehler erhalten haben, geben Sie die Zeile, auf der sie aufgetreten ist, und die Ausnahme-/Fehlerdetails an. Bitte [bearbeiten] Sie diese Details in Ihrem Post, damit andere Benutzer Ihnen helfen können. –

Antwort

2

Wenn Sie die edit Variable (die ein DOM-Element enthält) in jQuery als Argument übergeben, wird ein jQuery-Objekt zurückgegeben. Das ändert den Bereich von this in Ihrem blur-Ereignis in einem jQuery-Objekt. jQuery hat keine Eigenschaft innerHTML, also gibt es undefined zurück. JavaScript DOM Elemente haben natürlich eine innerHTML Eigenschaft, deshalb funktioniert das zweite Beispiel.

Eine Möglichkeit, Ihr erstes Beispiel zu beheben, ist diese zu ersetzen:

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

mit diesem:

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

Funktioniert immer noch nicht. Bitte helfen Sie mir. – Advaith

+0

Ein anderes Problem, das ich sehe, ist, dass Sie versuchen, an einen '.blur()' Event-Handler an einen Absatz zu binden. Absätze feuern Ereignisse wie "Unschärfe" und "Fokus" nicht ab, wenn Sie mit ihnen interagieren. Die Ausnahme ist, wenn sie ein "contenteditable" -Attribut haben, dessen Wert "true" ist. Könnten Sie bitte Ihre Absicht mit dem ersten Beispielcode klären? Möchten Sie den Wert der Formulareingabe in 'localStorage' speichern und den Absatz mit dem Inhalt auffüllen, wenn die Seite neu geladen wird? – SimianAngel

+0

Ja, ja, ist es. Ich möchte den Text im Abschnitt "localstorage" speichern – Advaith