一、安全
出于安全考虑,浏览器在下面两种情形之下,会拒绝执行通过客户端脚本对form组件submit()方法的调用:
-
直接通过客户端脚本调用INPUT type="file"组件的click()方法,选择文件并返回
-
通过程序预先设置INPUT type="file"组件的value属性
正常情况:
- 上传文件必须通过用户点击INPUT type="file"组件的[浏览…]按钮,选择好待上传文件返回后,再提交表单。也就是说上传文件是在用户知情,且通过用户授权的,才可以上传。
而在前面两种情况下,待上传的文件都是程序指定,未经过用户授权的,更有甚者是在用户不知情的情况下。如果允许提交表单的话,那么客户端的重要系统文件岂不是可以随意上传到服务器(居心叵测的服务器)上。正是因为这样浏览器才会拒绝执行上面两种情形下通过客户端脚本对form组件submit()方法的调用。
二、通过name属性,命名表单和表单元素
1、通过name属性,获取表单和表单元素的引用
Form对象的引用,通常可以从document.forms[]数组中获得。如document.forms[0]就是文档中的第一个表单。
而包含在Form对象中的表单元素的引用,通常可以从document.forms[].elements[]数组中获得。如document.forms[0].elements[2]就是文档中的第一个表单中的第三个表单元素。
通过设置form以及各种表单元素的name属性,引用将变得方便得多。
如下面的表单:
<form name="tform1" enctype="multipart/form-data" method="POST" action="upload.jsp" target="myiframe">
<INPUT type="hidden" name="hideIdentify" value="upload" />
</form>
对表单和表单元素的引用如下:
document.tform1 document.tform1.hideIdentify
2、通过target属性,将表单提交结果返回到同页面中的iframe
对于form的target属性,如果想将表单提交后的结果返回到同页面中的iframe中,须将target属性设置为该iframe的name属性。
<iframe name="myiframe" src="javascript:false"></iframe>
3、上传表单内容
表单中各表单元素的值是以 “表单元素name = 表单元素value” 的形式上传到服务器的。因此request.getParameter(name)方法中的name参数值应为 [表单元素name] 。
三、方法submit()和reset()
通过点击表单的提交按钮,提交表单之前会触发onsubmit事件handler。而通过客户端脚本调用form对象的submit()方法,只是提交表单,但不会触发onsubmit事件handler。
同样,通过点击表单的重置按钮,重置表单之前会触发onreset事件handler。而通过客户端脚本调用form对象的reset()方法,只是重置表单,但不会触发onreset事件handler。
如果onsubmit事件handler返回false,会阻止表单的提交。
同样,如果onreset事件handler返回false,会阻止表单的重置。