之前做东西接触过表单验证提交,但是都是为了完成工作,做完就做完了,没有注过表单验证提交有几种方法,各方法都有啥区别。今天瞎折腾了一下,对他们研究了一下,如下是我个人的理解:

submit

从字面上看是“提交”的意思,专门为提交而生。他既可以接受点击提交表单也能接受Enter(回车键)提交表单(也就是表单里的控件在获取焦点的时候回车直接提交表单),这样就比较人性化。

<form name="myForm" action="http://www.baidu.com" method="get"  >
name:<input name="name" type="text" /><br />
<input name="submit" type="submit" value="submit提交" />
</form>

当我输入"xiaomou"回车的时候表单提交了,url为:http://www.baidu.com/?name=xiaomou&submit=submit提交

button

就是个普通的按钮,接受回车提交表单,但是点击它的时候没反应(当然我说的是没有js的情况下),如要他实现简单的提交表单,要通过表单提交事件,<input name="button" type="button" value="button提交" onClick="this.form.submit()"/>,这时候你会惊奇的发现它也能像submit按钮一样点击就可以提交表单了

<form name="myForm" action="http://www.baidu.com" method="get"  >
name:<input name="name" type="text" /><br />
<input name="button" type="button" value="button提交" onClick="this.form.submit()"/>
</form>

同样当我输入"xiaomou"回车的时候表单提交了,url为:http://www.baidu.com/?name=xiaomou,没有了submit=submit提交

下面通过测试代码比较一下他们表单验证提交的不同实现方法:

通过submit按钮触发表单的提交事件onSubmit来提交表单

 <form name="myForm" action="http://www.baidu.com" method="get" onSubmit="return submitForm()" >
name:<input name="name" type="text" /><br />
<input name="submit" type="submit" value="submit提交"/>
</form>
<script>
function submitForm(){
var _form=document.forms[0];
//var _form=document.getElementsByName("myForm")[0];
//var _form=document.getElementsByName("myForm").item(0);
return checkName(_form.name,_form.name.value);
}
function checkName(id,name) {
var filter1 = /^[A-Za-z]+$/;
var filter2 =/[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*/;
if (filter1.test(name)||filter2.test(name)){
return true;
}
else {
alert("请输入名字,名字上不能出现数字或特殊字符");
id.focus();
return false;
}
}
</script>

当然也可以在submit按钮onClick提交,如:

 <form name="myForm" action="http://www.baidu.com" method="get" >
name:<input name="name" type="text" /><br />
<input name="submit" type="submit" value="submit提交" onClick="return submitForm()"/>
</form>
<script>
function submitForm(){
var _form=document.forms[0];
//var _form=document.getElementsByName("myForm")[0];
//var _form=document.getElementsByName("myForm").item(0);
return checkName(_form.name,_form.name.value);
}
function checkName(id,name) {
var filter1 = /^[A-Za-z]+$/;
var filter2 =/[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*/;
if (filter1.test(name)||filter2.test(name)){
return true;
}
else {
alert("请输入名字,名字上不能出现数字或特殊字符");
id.focus();
return false;
}
}
</script>

把上面的代码换成button按钮

 <form name="myForm" action="http://www.baidu.com" method="get" onSubmit="return submitForm()" >
name:<input name="name" type="text" /><br />
<input name="button" type="button" value="button提交"/>
</form>
<script>
function submitForm(){
var _form=document.forms[0];
//var _form=document.getElementsByName("myForm")[0];
//var _form=document.getElementsByName("myForm").item(0);
return checkName(_form.name,_form.name.value);
}
function checkName(id,name) {
var filter1 = /^[A-Za-z]+$/;
var filter2 =/[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*/;
if (filter1.test(name)||filter2.test(name)){
return true;
}
else {
alert("名字不能出现数字或特殊字符");
id.focus();
return false;
}
}
</script>

如上这一段代码点击提交按钮没反应,只能接受回车键提交事件,那在给botton按钮加上onClick="this.form.submit()"会不会触发提交事件呢?结果如愿的实现了一半!!——没有通过验证就直接提交了,只是直接执行了submit()事件提交了表单而已,没有执行onSubmit="return submitForm()"里的表单验证事件就提交了。

 <form name="myForm" action="http://www.baidu.com" method="get" onSubmit="return submitForm()">
name:<input name="name" type="text" /><br />
<input name="button" type="button" value="button提交" onClick="this.form.submit()"/>
</form>
<script>
function submitForm(){
var _form=document.forms[0];
//var _form=document.getElementsByName("myForm")[0];
//var _form=document.getElementsByName("myForm").item(0);
return checkName(_form.name,_form.name.value);
}
function checkName(id,name) {
var filter1 = /^[A-Za-z]+$/;
var filter2 =/[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*/;
if (filter1.test(name)||filter2.test(name)){
return true;
}
else {
alert("名字不能出现数字或特殊字符");
id.focus();
return false;
}
}
</script>

如要让它接受回车键提交与点击提交都执行表单验证后再提交上服务器,只能再修改js了,如下代码修改过后能实现:

 <form name="myForm" action="http://www.baidu.com" method="get" onSubmit="return submitForm()">
name:<input name="name" type="text" /><br />
<input name="button" type="button" value="button提交" onClick="submitForm()"/>
</form>
<script>
function submitForm(){
var _form=document.forms[0];
if (checkName(_form.name,_form.name.value)){
 _form.submit();
}else{
_form.onSubmit=false;
return false;
}
}
function checkName(id,name) {
var filter1 = /^[A-Za-z]+$/;
var filter2 =/[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*/;
if (filter1.test(name)||filter2.test(name)){
return true;
}
else {
alert("名字不能出现数字或特殊字符");
id.focus();
return false;
}
}
</script>

表单验证提交——submit与button的更多相关文章

  1. 第一百五十四节,封装库--JavaScript,表单验证--提交验证

    封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...

  2. 原生JS写表单验证提交功能

    先上效果图: 表单的基础内容就是昵称判断.手机号判断.邮箱判断.身份证号码判断,这里是用到正则验证检验格式. 页面的表单写法就是一个form的提交.输入框用input来实现,输入内容用value来获取 ...

  3. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  4. form表单重复提交,type=“button”和type=“submit”区别

    公司测试提了一个项目后台在IE浏览器下(360,firefox就没问题)出现数据重复的问题,调试了好久终于发现问题所在,也不知道是谁写的代码,醉醉的.... 错误地点: <input type= ...

  5. jquery.validate+jquery.form表单验证提交

    1.通过jquery.validate的submitHandler选项,即当表单通过验证时运行回调函数.在这个回调函数中通过jquery.form来提交表单: <script type=&quo ...

  6. AngularJS的表单验证提交示例

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularjsFormSubmit.rar 前台代码: <%@ page content ...

  7. Jquery插件easyUi表单验证提交

    <form id="myForm" method="post"> <table align="center" style= ...

  8. jQuery Validatede 结合Ajax 表单验证提交

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. boostrap ajax表单验证提交

    =============================================================================== 1. 1 <link href=& ...

随机推荐

  1. Linux命令记录

    端口号 1.查看端口号 使用netstat -anp来查看那些端口被打开.加参数'-n'会将应用程序转为端口显示,即数字格式的地址,如:nfs->2049, ftp->21,因此可以开启两 ...

  2. 路由器WDS桥接教程

    因为有吧友买了此款路由又不会桥接,因此做这个教程.老鸟自动路过,废话不多说,下面开始讲解. 1.wifi密码破解和路由器用户名和密码部分请自行解决,我只讲桥接部分.首先,在浏览器里输入192.168. ...

  3. D3js初探及数据可视化案例设计实战

    摘要:本文以本人目前所做项目为基础,从设计的角度探讨数据可视化的设计的方法.过程和结果,起抛砖引玉之效.在技术方案上,我们采用通用web架构和d3js作为主要技术手段:考虑到项目需求,这里所做的可视化 ...

  4. zoj 3647 Gao the Grid

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4837 先求出从所有点随机找出三个点的组合数,然后去掉共线的,平行好去掉,斜线就 ...

  5. [LeetCode 119] - 杨辉三角形II(Pascal's Triangle II)

    问题 给出一个索引k,返回杨辉三角形的第k行. 例如,给出k = 3,返回[1, 3, 3, 1] 注意: 你可以优化你的算法使之只使用O(k)的额外空间吗? 初始思路 首先来复习复习杨辉三角形的性质 ...

  6. 一个简单的以User权限启动外部应用程序

    BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lpszApplication, LPCWSTR lpsz ...

  7. FILTER 执行次数

    select count(*) from SAVJ_ATOMJOURBAK where ((list_flag='1' and prt_flag='0') and acct_no not in (se ...

  8. oschina BI商业智能开源软件

    54款 BI商业智能开源软件 MySQL数据仓库解决方案 Infobright OLAP 分析引擎 Apache Kylin 数据处理和分发系统 Apache NiFi OLAP 数据查询引擎 Dru ...

  9. javascript中子类如何继承父类

    参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4 function Shape() { this.x = 0; t ...

  10. Hadoop 类Grep源代码注释

    /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agree ...