2010-01-28 104 views
2

我試圖提交一個表單,其中包含動態元素,這些動態元素在頁面完成加載後通過jQ添加到DOM中。jQuery:提交動態表單元素的問題

當我在表單上運行serialize()時,它會抓取硬編碼到頁面中的所有字段的數據 - 但不是動態字段。

這裏有相同的一些代碼片斷..

HTML

<form id="someform" name="someform" method="post" action""> 
    <input type="text" name="afield" /> 
<ul id="somelist"> 
</ul> 
<input type="submit" name="submit" /> 
</form> 

<img id="add" src="add-button.png" /> 

<div class="new_unit" style="display:none"> 
<input type="text" name="somefield" /> 
</div> 

的JavaScript

<script type="text/javascript"> 
// Adds a new field to the form 
$('#add').click(function() { 
$('#somelist').append('<li>' + $('.new_unit').html() + '</li>'); 
}); 

// Validate before submission 
$('#someform').validate({ 
......., 
....., 
submitHandler: submit_form 
}); 

function submit_form() { 
_data = $('#someform').serialize(); 
alert(_data); 
} 
</script> 

在命中提交按鈕,在靜態字段的數據, 字段正在顯示...但任何由jQuery添加的某些字段不是。

我在這裏找到了幾個similar questions。我遵守建議的解決方案,但沒有效果。

我正在使用最新的jQuery(1.4.1) - 並考慮使用live()事件綁定器進行播放。我有一種可能有助於解決此問題的感覺,但無法弄清楚如何將它與validate()插件結合使用。

有什麼建議嗎?

感謝, 平方公尺Ë

+0

嗯,你的代碼字面上粘貼到託管一個帶有鏈接的測試文件到谷歌的jquery和ms的託管jquery.validate適用於我。至少在Firefox 3.6中。我可以給你一個完整的測試文件的副本,如果你想 – 2010-01-28 04:19:11

+0

Grrrr ......這個噩夢不會!對我而言,至少......直到我將這些[]包括在內。我想,最有可能的問題是類似命名字段的多個實例。感謝您的反饋意見。 – 2010-01-28 09:03:47

回答

4

的問題是,您的動態添加字段都爲名稱相同。你必須給他們不同的名字,或者,根據你在服務器上使用的內容,你可以給他們一個像somefield[]這樣的名字來聚合它們(PHP和我相信Python處理這個)。

給他們一個不同的名稱,它可能是稍微容易做到這一點:

<input type="text" id="copy" /> 

和:

$("#add").click(function() { 
    $("#copy").clone().removeAttr("id").attr("name", "field[]") 
    .appendTo("#somelist").wrap("<li>") 
}); 
+0

Coooool !!謝謝噸。 php []聚合完成了訣竅。克隆()功能是一個了不起的時間段。想知道爲什麼我從來沒有用過這麼久! – 2010-01-28 04:11:34