|
手元の環境で実験してみてました。
var ary = []; var id = "test"; localStorage[id] = ary; console.log( Object.prototype.toString.call( ary ) ); console.log( Object.prototype.toString.call( localStorage["test"] ) );
上記を実行したところ、 [object Array] [object String] と出力されました。
localStorage["test"] = ["123", 456, true]; console.log( localStorage["test"] );
上記を実行したところ、 123,456,true と出力されました。
つまり、変数 obj が localStorage である以上、 localStorage["test"] = ["123", 456, true]; は localStorage["test"] = ["123", 456, true].toString(); すなわち localStorage["test"] = "123,456,true"; 相当になるという事のようです。
これはつまり、 obj[this.id] = []; が、 obj[this.id] = ""; として扱われてしまうことを意味します。 文字列なので、当然 push できません。
配列であることにこだわらず、 obj[this.id] += (',' + $(this).val()); のような文字列前提の設計に切り替えては如何でしょう。
どうしても push したいなら、ちょっと手間ですが、 obj[this.id] = JSON.stringify([]); にしておいて、 var ary = JSON.parse(obj[this.id]); ary.push($(this).val()); obj[this.id] = JSON.stringify(ary); として呼び出すとか。
|