我已經閱讀了很多關於類似問題的問題,但我還是無法掌握它。如何使用jQuery動態添加輸入序列化表單?
我有一個簡單的HTML表單就像
<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>
現有的兩個隱藏的輸入可以在文件加載設置由於事先保存。 現在我有圖像(種類的菜單)。如果他們點擊相應的隱藏的輸入被添加到形式:
<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>
這正是我想要的。但是當點擊提交按鈕時,只有前兩個元素被提交(未被動態添加的元素)。
現在,我讀了很多關於.bind和.live處理程序的知識,但我明顯錯過了一些觀點。我試圖刪除上的圖像onclick屬性和給.live與它們結合,因爲它們是使新的輸入:
$(".clickable-item").live("click", function() {
addItem($(this).attr("id"),1);
});
然而,ID沒有被轉印其是需要的,但(因此沒有正確的輸入被添加)。我知道.live不會將處理程序綁定到任何元素,而是綁定到事件。
是否有可能將已被點擊的元素傳遞給活動處理程序? 圖像是否應該被.live觀看,還是應該綁定其他東西?
我在這裏學到的最後一件事形成另一個問題,即輸入應該被.live監視,因爲它們是動態添加的。但是我會附帶什麼樣的事件呢?輸入本身不被點擊。
我真的很感激任何幫助,因爲我正在琢磨着自己的腦袋,並開始迷失在那一張上。
由於提前, 保羅
謝謝你。我用現在有像「ei37」這樣的id的輸入改變了代碼(也在問題文本中)。雖然這有效(輸入插入正確)。表單上的.serialize()仍然返回尚未添加的輸入值。 總體目的是標記不同的區域。有一組定義的標記(圖像)。當加載區域表單時,已經存在的標記以表格形式顯示(預加載的輸入)。通過點擊任何標記,將相應的輸入添加到表單中。點擊提交按鈕(保存)後,數據應該再次存儲在數據庫中。 – Paul
表單上的.serialize()仍然返回尚未添加的輸入值*如何序列化不存在的返回值?我建議你爲你的問題創建一個http://jsfiddle.net/演示。 –
對不起,應該讀取表單上的_.serialize()仍然返回尚未添加的輸入值**動態** only_ – Paul