上次開發項目,我發現一個很奇怪的現象,讓我苦惱了很久,現在分享給大家,希望大家看完就會弄。
情況是這樣的,直接上代碼:
<html>
<head></head>
<body>
<form action="xx.php" method="post" >
<table>
<tr id='before'>
<td>用戶名</td>
<td><input type='text' name='uname'/></td>
</tr><tr><td><input type='submit' value='提交'/></td></tr>
</table></form>
<script>
var op=$("<input type='hidden' name='uid'/>");
$("#before").before(op);
</script>
</body>
</html>
代碼如上,有一個表單,表單裏面有一個文本框,可以輸入用戶名。然後,在後面我們用jQuery還添加了一個隱藏域。當點擊提交時,你會發現只有用戶名被提交了,而用jquery添加的隱藏域卻沒有提交。
這是爲什麼呢?
原來,jquery添加的元素,都有一個form屬性。如果想要解決這個問題,只需要改兩個地方。
1.首先爲form取個名字
將
<form action="xx.php" method="post" >
改成
<form action="xx.php" name="myform" method="post" >
2.在創建表單元素時,別忘給表單元素加form屬性。
將
var op=$("<input type='hidden' name='uid'/>");
改成
var op=$("<input type='hidden' name='uid'/>");
op.attr("form","myform");
這樣提交表單時就會把這個動態創建的元素也提交上去了。