本节示例讲解 JavaScript 的提交 form 表单和重置 form 表单。
使用 <input> 和 <button> 标签都可以定义提交按钮,只要将 type 属性值设置为“submit”即可,而图像按钮则是通过将 <input> 的 type 属性值设置为“image”。当单击提交按钮或图像按钮时,就会提交表单。
在下面示例中,当在表单内的文本框中输入文本之后,单击“提交”按钮会触发 submit 事件,该函数将禁止表单提交数据,而是弹出提示对话框显示输入的文本信息。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- <input name="" type="submit" />
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0];
- // 获取文本框的引用指针
- var f = document.getElementsByTagName("form")[0];
- // 获取表单的引用指针
- f.onsubmit = function(e){ // 在表单元素上注册submit事件处理函数
- alert(t.value);
- return false; // 禁止提交数据到服务器
- }
- </script>
在下面示例中,当表单内没有包含“提交”按钮时,在文本框中输入文本之后按 Enter 键也一样能够触发 submit 事件。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0];
- // 获取文本框的引用指针
- var f = document.getElementsByTagName("form")[0];
- // 获取表单的引用指针
- f.onsubmit = function(e){
- alert(t.value);
- }
- </script>
在 <textarea> 文本区中按 Enter 键只会换行,不会提交表单。
以这种方式提交表单时浏览器会在将请求发送给服务器之前触发 submit 事件,用户有机会验证表单数据,并决定是否允许表单提交。
阻止事件的默认行为可以取消表单提交。下面示例先验证文本框中是否输入字符,如果为空,则调用 preventDefault() 方法阻止表单提交。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0]; // 获取文本框的引用指针
- var f = document.getElementsByTagName("form")[0]; // 获取表单的引用指针
- f.onsubmit = function(e){
- if(t.value.length < 1){
- var event = e || window.event;
- if (event.preventDefault){
- event.preventDefault();
- } else {
- event.returnValue = false;
- }
- }
- }
- </script>
如果要禁止按 Enter 键提交响应,可以监测键盘响应,当按下 Enter 键时设置其返回值为 false,从而取消键盘的默认动作,禁止按 Enter 键提交响应行为。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0];
- // 获取文本框引用指针
- t.onkeypress = function(e){ // 为文本框绑定键盘keypress事件处理函数
- var e = e || window.event; // 标准化事件对象
- return e.keyCode != 13;
- // 当按下回车键时,设置返回值为false,禁止默认键盘行为
- }
- </script>
调用 submit() 方法也可以提交表单,这样就不需要表单包含“提交”按钮,任何时候都可以正常提交表单。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0]; // 获取文本框的引用指针
- var f = document.getElementsByTagName("form")[0]; // 获取表单的引用指针
- t.onchange = function(){
- f.submit();
- }
- </script>
调用 submit() 方法不会触发 submit 事件,因此在调用此方法之前要先验证表单数据。
在实际应用中,会出现用户重复提交表单现象。例如,在第 1 次提交表单后,如果长时间没有反应,用户可能会反复单击提交按钮,这样容易带来严重后果,服务器反复处理请求组,或者错误保存用户多次提交的订单。解决方法:在第一次提交表单后禁用提交按钮,或者在 onsubmit 事件处理函数中取消表单提交操作。
为 <input> 或 <button> 标签设置 type="reset" 属性可以定义重置按钮。
- <input type="reset" value="重置按钮">
- <button type="reset">重置按钮</button>
当单击重置按钮时,表单将被重置,所有表单字段恢复为初始值。这时会触发 reset 事件。
下面示例设计当单击【重置】按钮时,弹出提示框,显示文本框中的输入值,同时恢复文本框的默认值,如果没有默认值,则显示为空。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- <input name="" type="reset" />
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0];
- // 获取文本框的引用指针
- var f = document.getElementsByTagName("form")[0];
- // 获取表单的引用指针
- f.onreset = function(e){ // 在表单元素上注册reset事件处理函数
- alert(t.value);
- }
- </script>
也可以利用这个机会,在必要时取消重置操作。下面示例检测文本框中的值,如果输入 10 个字符以上,就不允许重置了,避免丢失输入的文本。
- <form id="form1" name="form1" method="post" action="">
- <input type="text" name="t" id="t" />
- <input type="reset" value="重置按钮">
- </form>
- <script>
- var t = document.getElementsByTagName("input")[0]; // 获取文本框的引用指针
- var f = document.getElementsByTagName("form")[0]; // 获取表单的引用指针
- f.onreset = function(e){
- if(t.value.length > 10){
- var event = e || window.event;
- if (event.preventDefault){
- event.preventDefault();
- } else {
- event.returnValue = false;
- }
- }
- }
- </script>
用户也可以使用 form.reset() 方法重置表单,这样就不需要包含重置按钮。