私は似たような質問に答える多くの質問を読んだが、まだそれを把握することはできない。jQueryを使用して動的に入力を追加したフォームをシリアル化する方法は?
私は2つの既存の隠し入力が原因セーブ前にドキュメントの読み込み時に設定することができ、単に
<form id="edit-items" name="edit-items" onsubmit="saveItems();">
<input type="submit" value="Save">
<input class="item" id="ei81" type="hidden" name="i[81]" value="1">
<input class="item" id="ei124" type="hidden" name="i[124]" value="1">
</form>
のような単純なHTMLフォームを持っています。 イメージ(メニューのようなもの)があります。彼らがクリックされた場合は、対応する非表示の入力がフォームに追加されます。
<img id="i37" class="clickable-item" src="items/i37.gif" title="item name" onclick="addItem(37,1)" />
のaddItem機能:すべての画像をクリックした後、正しい動作します
function addItem(id,n) {
var zitem = $("#e"+id);
if (0 in zitem) {
if (zitem.val() > 0) {
var newcnt = parseInt(zitem.val()) + n;
if (newcnt <= 0) {
zitem.remove();
}
else {
zitem.val(newcnt);
}
}
}
else if(n == 1) {
var iform = $("#edit-items");
iform.append("<input class=\"item\" id=\"e"+id+"\" type=\"hidden\" name=\"i["+id+"]\" value=\"1\">");
}
}
この部分、私のフォームは
のように見えます<form id="edit-items" name="edit-items" onsubmit="saveItems();">
<input type="submit" value="Save">
<input class="item" id="ei81" type="hidden" name="i[81]" value="1">
<input class="item" id="ei124" type="hidden" name="i[124]" value="1">
<input class="item" id="ei37" type="hidden" name="i[37]" value="1">
</form>
これは私が欲しいものです。しかし、送信ボタンを押すと最初の2つの要素(動的に追加されていない要素)のみが送信されます。
今、.bindハンドラと.liveハンドラについてたくさん読んでいますが、明らかにいくつかの点がありません。
$(".clickable-item").live("click", function() {
addItem($(this).attr("id"),1);
});
しかし、IDは、必要とされる転送されていないが(それゆえノー正しい入力:私は、画像にonclick属性を削除するために、彼らは新しい入力を引き起こしているので、それらに.liveをバインドしようとしました追加されます)。私は、.liveはハンドラを要素にバインドするのではなく、イベントにバインドすることを学びました。
ライブハンドラにクリックされた要素を渡すことは可能ですか? イメージは.liveによって監視されるべきですか、それとも別のものにバインドされるべきですか?
最後に私が学んだもう一つの質問は、動的に追加されているので、入力が.liveによって監視されるべきことです。しかし、私はどんな種類のイベントを付けるのですか?入力自体はクリックされません。
私は自分の頭を砕いて迷っているので、本当に助けてもらえます。 live()
[docs]について
事前のおかげで、 ポール
ありがとうございました。私は "ei37"のようなIDを持つ入力でコード(問題のテキストも)を変更しました。これは機能しますが(入力は右に挿入されます)。フォーム上の.serialize()はまだ追加されていない入力値を返します。 全体の目的は、異なるゾーンをマークすることです。定義された一連のマーカー(画像)があります。ゾーンフォームがロードされると、既存のマーカがフォームに表示されます(プリロードされた入力)。マーカーをクリックすると、対応する入力がフォームに追加されます。送信ボタン(保存)をクリックすると、データは再びデータベースに保存されます。 – Paul
*フォームの.serialize()はまだ追加されていない入力値を返します*存在しない戻り値をどのように直列化できますか?あなたの問題のためのhttp://jsfiddle.net/デモを作成することをお勧めします。 –
申し訳ありませんが、フォームの_.serialize()を読み込むと、まだ追加されていない入力値が返されます**動的** only_ – Paul