<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. 转:eclipse导入工程中文乱码问题

    eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  2. CentOS 7.0 安装 python3.X 脚本

    #!/bin/sh #第一个Linux下的脚本,太多不明白的地方,只是依着网上的例子照葫芦画瓢,能正常运行即可 #运行环境 CentOS 7.0 版本 #首行指定程序的路径,以#号开头的行是注释行 # ...

  3. Algorithm: quick sort implemented in python 算法导论 快速排序

    import random def partition(A, lo, hi): pivot_index = random.randint(lo, hi) pivot = A[pivot_index] ...

  4. 数论——lucas定理

    网上证明很多,虽然没看懂.... 主要解决大组合数取模的情况 费马小定理求大组合数: a^(p-1)=1%p; 两边同除a a^(p-2)=1/a%p; C(n,m)= n!/(m!*(n-m)!) ...

  5. VIJOS-P1340 拯救ice-cream(广搜+优先级队列)

    题意:从s到m的最短时间.(“o"不能走,‘#’走一个花两个单位时间,‘.'走一个花一个单位时间) 思路:广搜和优先队列. #include <stdio.h> #include ...

  6. C++默认参数不能是一个引用

    引用做参数时不能传一个定值(如数字或者const等~~~) somefunc(int& a = 4) -> default argument for ‘int& a’ has t ...

  7. angularjs 中ie兼容性的问题收集

    今天在项目中做ie8的兼容的时候,发现angularjs中一些内容这样写有问题,那样写就没有问题了,自己记录一下内容: 如果遇到了ie8中使用$http.post请求不到数据的时候,以下的方法是获取不 ...

  8. python 类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...

  9. API功能测试如何实施(转载自测试之道 微信公众号)

    什么是API 关于定义什么的,直接维基可得: API(Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定.由于近 ...

  10. 提高你的Java代码质量吧:少用静态导入

    一.分析  从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序. 但是,滥用静态导入会使程序更难阅读,更难维护.静态导 ...