firefox 表单无法提交ajax里的内容
作者:edwin 日期:2011-08-07
今天在修改一个内容表单,其中一个输入文本需使用ajax调用,并提交到数据库。
起初在firefox上测试,提交表单后,页面接收到ajax输入文本的值竟然为空,不能获取表单发送过来的内容。尝试过寻找:表单的原因(id和name的值)、js代码的原因,都不是!
后来在ie上试,居然可以成功提交!?
在网上找了很久,才找到一个针对性而有效的答案。这当中的原因其实是因为<form>和</form>嵌套的位置不够清晰,firefox无法识别。
以下是高手解答该问题的内容:
在以前的教材和实际应用里,应该很常见这种类型的嵌套:
<table>
<form>
<tr><td></td>
</tr>
</form>
</table>
目的无非是不想让form的margin和padding撑出不应有的空白,而这样做一直以来也都是有效的,在IE中无论是动态create出的表单项还是原有的内容都能被正确地传递,虽然这样是不符合DOM规范的。
在Firefox中,上面的嵌套也能正确地传递事先定义的表单参数,但是如果使用DOM创建新的表单项,新的Node无法与未按标准嵌套的form建立关联,所以post数据的时候它是不会被传递的。
需要的改动仅仅是让结构更清晰:
<form>
<table>
<tr><td></td></tr>
</table>
</form>
现在我们只需要把form的margin和padding设为0,无需杂乱无可辨认的可恶嵌套。
可惜看到的太晚,不然可以省去很多時間~