【IgniteUI】formの内容をserializeObjectで取得する際のメモ
先日とある改修案件の対応をした際のメモ。
Spring MVCとIgniteUIを用いて構築された画面のフォーム操作。
var formData = $("#form").serializeObject();
こんな感じでフォームの内容を取得して変数にセットしようとした際、Stringで設定したかったあるinputの内容がArrayになってしまった。
今まではStringで取れていたのに…と悩んでいたところ、どうやら無効化がうまく動いておらず重複した項目が渡ってしまったため、勝手にArrayにされてしまった模様。
jspはこんな感じ。
<form:hidden path="From" id="hidFrom" /> (中略) <form:input path="From" class="textCss ime-disabled" id="txtFrom" />
生成された2つのinputのnameが重複していたため、serializeObjectした際に同一項目とみなされた模様。
pathの値を元に勝手にnameつけてくれるもんなの…?
なので、片方殺してあげればいいよねってことで
$("#txtFrom").attr("disabled", true);
な感じで記述したら死なない。
正確に言うと、Textbox自体は死んでるんだけど勝手に作られたhiddenのinputが生きたままになってる。
IgniteUIのinputって、実際に入力するinputの直後にhiddenのinputを生成して、そこで値持つのね…。
悩んだ結果殺し方間違ってるじゃん、と。
IgniteUIのinputはそれ用の記述でプロパティ指定してあげないといけない模様。
$("#txtFrom").igTextEditor({ disabled : true });
こうすることで正しく殺せてArrayにもならず想定した値が飛ぶようになりましたとさ。