teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

サンプルを追加

2015/08/19 01:17

投稿

KiKiKi_KiKi
KiKiKi_KiKi

スコア596

answer CHANGED
@@ -37,4 +37,31 @@
37
37
  また、このままでは、保存された文字列の取得に関してですが、inputタグの中身を全部消した時も、`onchange`イベントが発生して`localStorage`に保存されます。
38
38
  そして、`localStorage.getItem('txt'); `の値は`null`ではなく、`""`空文字列になりますので、ロードした段階で空文字列がinputタグに入れられてしまいます。
39
39
  恐らくこれは意図しない動作かと思いますので、保存時に空文字列であれば保存しないようにするか、ロード時に空文字列であればinputタグに値を入れないようにするかをしてあげたほうが良いかと思います。
40
- 全角スペースも保存されてしまいますので、コレも意図しないのであれば、inputタグの値が変更された時に、全角/半角スペースをtrimしてあげる処理を入れて、上記の空文字列の判別と組み合わせれば意図したと通りの動きになるかと思います。
40
+ 全角スペースも保存されてしまいますので、コレも意図しないのであれば、inputタグの値が変更された時に、全角/半角スペースをtrimしてあげる処理を入れて、上記の空文字列の判別と組み合わせれば意図したと通りの動きになるかと思います。
41
+
42
+ 取り急ぎ作った動作保証をしていないサンプルを載せておきます。処理を追加する参考になれば幸いです。
43
+ ```javascript
44
+ // trimメソッドがなければ追加する
45
+ if(!String.prototype.trim) {
46
+ String.prototype.trim = function () {
47
+ return this.replace(/^\s+|\s+$/g,'');
48
+ };
49
+ }
50
+
51
+ var inputText = document.getElementById('txt');
52
+ var txt = inputText.value;
53
+ window.onload = function() {
54
+ var body_txt = localStorage.getItem('txt');
55
+ // 空文字列もNGにする
56
+ if (body_txt){
57
+ inputText.value = body_txt;
58
+ }
59
+ inputText.onchange = function() {
60
+ var inputVal = inputText.value.trim();
61
+ // trimしても値があるときだけ保存
62
+ if(inputVal) {
63
+ localStorage.setItem('txt', inputVal);
64
+ }
65
+ };
66
+ };
67
+ ```

2

空文字列でもlocalStorageから読みだしてしまう問題

2015/08/19 01:17

投稿

KiKiKi_KiKi
KiKiKi_KiKi

スコア596

answer CHANGED
@@ -32,4 +32,9 @@
32
32
  localStorage.setItem('txt', inputText.value);
33
33
  };
34
34
  };
35
- ```
35
+ ```
36
+
37
+ また、このままでは、保存された文字列の取得に関してですが、inputタグの中身を全部消した時も、`onchange`イベントが発生して`localStorage`に保存されます。
38
+ そして、`localStorage.getItem('txt'); `の値は`null`ではなく、`""`空文字列になりますので、ロードした段階で空文字列がinputタグに入れられてしまいます。
39
+ 恐らくこれは意図しない動作かと思いますので、保存時に空文字列であれば保存しないようにするか、ロード時に空文字列であればinputタグに値を入れないようにするかをしてあげたほうが良いかと思います。
40
+ 全角スペースも保存されてしまいますので、コレも意図しないのであれば、inputタグの値が変更された時に、全角/半角スペースをtrimしてあげる処理を入れて、上記の空文字列の判別と組み合わせれば意図したと通りの動きになるかと思います。

1

localStorageへの保存がうまく行ってない原因について

2015/08/19 01:03

投稿

KiKiKi_KiKi
KiKiKi_KiKi

スコア596

answer CHANGED
@@ -11,4 +11,25 @@
11
11
  localStorage.setItem('txt',txt.value);
12
12
  };
13
13
  }; // ←これ
14
+ ```
15
+
16
+ ---
17
+
18
+ また、localStorageへの保存が意図した通りに動作していないのは、inputではなく、inputのvalueの文字列に対して`.onchange`イベントをつけたり`.value`を取得しようとしていたりしているので意図したとおりに動作してないのかと思います。
19
+
20
+ ```javascript
21
+ var inputText = document.getElementById('txt');
22
+ var txt = inputText.value;
23
+ window.onload = function() {
24
+ var body_txt = localStorage.getItem('txt');
25
+ if (body_txt != null){
26
+ // inputタグのvalueにbody_txtを入れる
27
+ inputText.value = body_txt;
28
+ }
29
+ // inputにonchangeイベントをつける
30
+ inputText.onchange = function() {
31
+ // inputタグのvalueを取得して保存する
32
+ localStorage.setItem('txt', inputText.value);
33
+ };
34
+ };
14
35
  ```