IEでサンプルページのテストしてた時には気付かなかったんだけども、ChromeとSafariからだと表の値が更新できていなかった。
で、確認したら原因はここだったっぽい。
// 表のデータを連想配列に設定している部分 editable_table_val[adrs].value = edit_val;
IEでテストするとこれでも配列の更新できてたんだけどなー。
うーん。って思いながら、こんな風に記述を変えてみた。
editable_table_val[adrs]["value"] = edit_val;
んー?ちゃんと表の更新が画面に反映されるようになりました。
このプログラムとしてはちゃんと動くようになったからいいんだけど、解せない。
連想配列の使い方には、連想配列.プロパティ名と連想配列["プロパティ名"]があって、だいたい使い方調べるとどっちでもアクセスできるって書いてあって、記述的に問題なさそーなんだけどなー。
var obj = {}; obj.value = { innerObj: "俺はObject" }; obj["value"].innerObj = "そして俺は更新された。"; alert(obj["value"].innerObj); // ちゃんと「そして俺は更新された。」がアラートが出る。
試しにこんなコードを書いて実行しても、IEでもChromeでもちゃんと値の更新はできる。
何か他のコードが干渉してるんだろうか。
イベントハンドラ越しに更新してみる。
var obj = {}; obj.value = { innerObj: "俺はObject" }; obj["value"].innerObj = "そして俺は更新された。"; alert(obj["value"].innerObj); // ちゃんと「そして俺は更新された。」がアラートが出る。 $(".testBtn").click(function () { obj["value"].innerObj = "イベントから刺激を受けた。"; alert(obj["value"].innerObj); // ちゃんと「イベントから刺激を受けた。」がアラートが出る。 });
うーん。ちゃんと値の更新ができる。
さらに連想配列に関数を入れ子にして更新かけてみる。
var obj = {}; obj.value = { innerObj: "俺はObject" }; var ireko = { saigen: function () { obj["value"].innerObj = "連想配列を通じて刺激を受けた。"; alert(obj["value"].innerObj); } } ireko.saigen(); // ちゃんと「連想配列を通じて刺激を受けた。」がアラートが出る。
やっぱりちゃんと更新できるんだよなー。
どうして、セルの値更新は連想配列.プロパティ名の記述で更新できてなかったんだろう。
とりあえず、連想配列["プロパティ名"]に書き換えただけで更新通ったから、時間のある時にまた調べてみることにする。