<script type="text/javascript">
function check(){
var username=document.getElementById('username');
var password=document.getElementById('password');
//防止用户输入空格也验证通过
if (!(username.value.replace(/\s*/g,'')&&password.value.replace(/\s*/g,''))){
username.focus();
return false;
}else{
//document.forms[0].login.disabled=true;
document.getElementById('login').disabled=true;
document.getElementById('login').value='登录中';
return true;
}
}
</script>
 <form action="test.php" method="get" id="test" onsubmit="return check()">
<label for="username">用户名 : </label><input id='username' name="username" type="text" />
<label for="password">密 码 : </label><input id="password" name="password" type="password"/>
<input type="submit" value="登陆" id="login" name="login" />
</form>
<!--<button type="submit">提交</button>
下面的默认不会触发onsubmit()事件
<input type='button' value='提交'/>
<button onclick="_submit()">提交</button>-->

非行间事件的写法

 var obj = document.getElementById('myform');
var check = function(){
var username=document.getElementById('username');
var password=document.getElementById('password');
if (!(username.value.replace(/\s*/g,'')&&password.value.replace(/\s*/g,''))){
return false;
}else{
return true;
}
}
obj.onsubmit = function(){
return check();
}
// 这样写不能实现阻止表单提交
// obj.onsubmit = function(){
// var username=document.getElementById('username');
// var password=document.getElementById('password');
// if (!(username.value.replace(/\s*/g,'')&&password.value.replace(/\s*/g,''))){
// return false;
// }else{
// return true;
// }
// }

更新一下:为什么不写return就不能提交了呢?

1、<form id="myform" action="test.php" method="get" id="test" onsubmit="return check()"></form>
2、<form id="myform" action="test.php" method="get" id="test" onsubmit="check()"></form>
3、<form id="myform" action="test.php" method="get" id="test"></form> var obj = document.getElementById('myform'); ======================================================================================== obj.onsubmit = function(){
var username=document.getElementById('username');
var password=document.getElementById('password');
if (!(username.value.replace(/\s*/g,'')&&password.value.replace(/\s*/g,''))){
return false;
}else{
return true;
}
} ======================================================================================== var check = function(){
var username=document.getElementById('username');
var password=document.getElementById('password');
if (!(username.value.replace(/\s*/g,'')&&password.value.replace(/\s*/g,''))){
return false;
}else{
return true;
}
} ======================================================================================== obj.onsubmit = function(){
return check();
}

  onsubmit是form表单对象的一个属性;其值表面上是一个字符串,但是如果有表单提交它会执行这个字符串,根据返回值的布尔值来确定是否提交表单.
和eval和setTimeout第一个参数传字串执行差不多(这个我也写了一篇blog,关于eval变量污染的问题什么的:点这里);
如上面的2,当表当提交的时候首先检查onsubmit的字串执行后得到的值:而check函数返回的值是false,也即是onsubmit="check()"-->onsubmit="false";
这样onsubmit为一个字串并不为布尔值false;所以并不能阻止表单的提交.
如果是onsubmit="return check()";这样的话得到onsubmit="return false";字串依然是一句js代码继续执行得到onsubmit=false; OK,感觉这样差不多

另外的一种理解方法 :

把onsubmit当作是表单对象的一个原型方法默认onsubmit = "return true";-->

Form.prototype.onsubmit = function() {
return true;
};
如果onsubmit="check()";即是这样
Form.prototype.onsubmit = function() {
check();
return true;
};
也即:
Form.prototype.onsubmit = function() {
false;
return true;
};
这样即使执行onsubmit方法内的check()得到false,但是并没有对false进行任何操作,所以并不能覆盖原来的true,所以并不能阻止表单提交
Form.prototype.onsubmit = function() {
return check();
return true;
};
也即:
Form.prototype.onsubmit = function() {
return false;
return true;
};
OK! return true被覆盖;

onsubmit表单验证的更多相关文章

  1. [js]js的表单验证onsubmit方法

    http://uule.iteye.com/blog/2183622 表单验证类 <form class="form" method="post" id= ...

  2. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  3. jQuery Validate 表单验证 — 用户注册简单应用

    相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...

  4. 表单验证插件之jquery.validate.js

    提到表单验证的插件,第一个想到的就是jquery.validate.js,所以小生想在这里稍微详细地说一下这款插件的具体使用方法,便于理解,我直接附上整段demo的代码(没怎么调样式,主要是看js): ...

  5. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...

  6. 表单验证——jquery validate使用说明【另一个教程】

    [参考:http://www.tuicool.com/articles/y6fyme] jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证 ...

  7. js 表单验证控制代码大全

    js表单验证控制代码大全 关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制.判断字符长度 .js限制输入.限制不能输入.textarea 长 ...

  8. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  9. html5表单验证

    表单验证为终端用户检测无效的数据并标记这些错误,是一种用户体验的优化. 下面展现浏览器自带的验证功能也可在移动端中查看: HTML部分: <!DOCTYPE html> <html ...

随机推荐

  1. vs2013 报错AccessViolationException 解决方案

    最近 用vs2013 vs2010开发一个web 项目的时候  报AccessViolationException 异常 ,找不到原因 后边网上看了解决方法,试了一下 解决了,具体什么原因搞不清. 下 ...

  2. 树-二叉平衡树AVL

    基本概念 AVL树:树中任何节点的两个子树的高度最大差别为1. AVL树的查找.插入和删除在平均和最坏情况下都是O(logn). AVL实现 AVL树的节点包括的几个组成对象: (01) key -- ...

  3. 问题:关于贴友一个用js传递value默认值的简单实现

    需求和代码如下: “这是我的代码:” 1: <input type="text" id="price2" value="333"/&g ...

  4. 深入浅出 JavaScript 对象 v0.5

    JavaScript 没有类的概念,因此它的对象与基于类的语言中的对象有所不同.笔者主要参考<JS 高级程序设计>.<JS 权威指南>和<JS 精粹> 本文由浅入深 ...

  5. Obective-C之宏定义

    优(dan)美(teng)的前奏 宏定义这个东东,估计大家在代码中应该天天用吧. 在我刚刚做的一个项目中,各种往代码里码“#define”这种预处理指令. 什么动画时长啊,cell高度啊,cell的个 ...

  6. ThinkPHP中SQL调试方法

    $admin = D('Admin'); $info = $admin->field('`lastlogintime`,`lastloginip`')->where(array('user ...

  7. 【转载】socket的半包,粘包与分包的问题

    http://zhaohuiopensource.iteye.com/blog/1541270 首先看两个概念: 短连接: 连接->传输数据->关闭连接    HTTP是无状态的,浏览器和 ...

  8. CDH 5.5.1 Yum源服务器搭建

    CDH 5.5.1 Yum源服务器搭建 下载Cloudera Repo #下载资源仓库repo wget https://archive.cloudera.com/cdh5/redhat/6/x86_ ...

  9. Node.js中的ORM

    ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款,具体介绍请猛击:https://github.com/dresende/node-orm2 刚接触Nod ...

  10. SQL Where语句中AND与OR的计算次序 .

    AND 用在where子句中,用来指示检索满足所有给定条件的行,而OR用在where子句中,用来指示检索匹配任一给定条件的行. Where子句中可包含任意数目的AND和OR操作符号,但是要注意在SQL ...