使用帶有選擇下拉的表單。當用戶選擇選項時,它將通過Ajax發送到ajax.php
。該文件然後返回動態輸入字段。該form.php
看起來像這樣以前選項被選中:提交表單後保留動態表單域值
<form action="form.php" method="post" id="myform">
<select name="raw_ids_array[]" class="select2" multiple="multiple" id="raw_ids_array"><option></option><option value="1">first</option><option value="2">second</option></select>
<div id="raws_list_hidden"></div>
<input type="submit" id="submit_me" name="submit_me" value="go">
</form>
的form.php
看起來像這樣後選項被選中:
<form action="form.php" method="post" id="myform">
<select name="raw_ids_array[]" class="select2" multiple="multiple" id="raw_ids_array"><option></option><option value="1">first</option><option value="2">second</option></select>
<div id="raws_list_hidden"><input type="text" name="dynamic_field"></div>
<input type="submit" id="submit_me" name="submit_me" value="go">
</form>
我用這個代碼做阿賈克斯發帖:
<script>
$(function() {
function ajax_post_data(parameters) {
$.ajax({
method: "POST",
url: "ajax.php",
cache: false,
data: parameters,
success: function(data) {
$("#raws_list_hidden").html(data);
}
});
}
$('#raw_ids_array').on("change", function(e) {
parameters=$("#myform").serialize();
ajax_post_data(parameters);
});
});
</script>
但是,如果表單提交失敗,我需要一個將先前選擇的選項/輸入值再次顯示。所以添加了這個:
$(document).ready(function() {
parameters=$("#myform").serialize();
ajax_post_data(parameters);
});
當form.php
提交(被「重裝」)選擇的選項從raw_ids_array[]
到ajax.php
,它的帖子,然後添加動態字段爲raws_list_hidden
格設置一次。唯一不起作用的是用戶從dynamic_field
輸入的值不被序列化;因此,它變成空的。
我應該如何修改代碼,以便動態字段中的值也可以發佈到ajax.php
?
P.S.我可以序列的所有字段,如果我使用代碼:
$('#submit_me').click(function() {
parameters=$("#myform").serialize();
ajax_post_data(parameters);
});
但由於數據是序列化它不是有用發佈form.php
之前,所以我不知道,如果形式將失敗(如果提交一些無效的值)或不。
AJAX的一點是,它不」 t要求頁面重新加載。爲什麼不讓表單使用Ajax提交呢?然後,您將能夠提供成功/失敗,並且不會丟失提交的數據,因爲它不會重新加載頁面。 – webbm
這是一個很好的觀點,但我更喜歡只使用ajax將動態字段添加到表單,然後使用標準的HTML/PHP POST提交表單。 –