form表单的onsubmit() return问题
以前在项目中为一个表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性,所以常会写道:<form action="/admin/addUser.do" method="post" οnsubmit="validateForm();">,试图在validateForm()中return false来阻止表单的提交。实际上的效果是即使return false 表单 还是会提交。后来发现 οnsubmit="return validateForm()"就没有问题了,当时也没有多想就继续做其它事情了。
直到今天看到一篇文章作了清楚的解释:
众所周知,在表单中加上οnsubmit="return false;"可以阻止表单提交。
下面是简单的一小段代码:
java代码: |
<form action="index.jsp" method="post" οnsubmit="submitTest();"> <INPUT value="www"> <input type="submit" value="submit"> </form> <SCRIPT LANGUAGE="JavaScript"> <!-- function submitTest() { // 一些逻辑判断 return false; } //--> </SCRIPT> |
大家判断像上面的写法,点击submit按钮该表单是否提交?
若答案为是,就不用往下看了。
若答案为否,错了。实际情况是表单正常提交,若想它不提交,应该将
java代码: |
<form action="index.jsp" method="post" οnsubmit="submitTest();"> |
改为
java代码: |
<form action="index.jsp" method="post" οnsubmit="return submitTest();"> |
为何?
原来onsubmit属性就像是<form>这个html对象的一个方法名,其值(一字符串)就是其方法体,默认返回true;
和Java一样,在该方法体中你可以写任意多个语句,包括内置函数和自定义函数,如
java代码: |
οnsubmit=" alert('haha'); // 内置函数 submitTest(); // 自定义函数 alert(this.tagName); // 用到了this关键词 ......(任意多条语句) return false; " |
就相当于
java代码: |
Form.prototype.onsubmit = function() { alert('haha'); // 内置函数 submitTest(); // 自定义函数 alert(this.tagName); // 用到了this关键词 ......(任意多条语句) return false; }; |
这样的话你就覆写了(override)其默认方法(默认返回true)
大家注意到方法体中可以用this这个关键词,这里即代表了<form>的对象实例。
经过这样的分析后,以上情况就不难理解了:
java代码: |
<form action="index.jsp" method="post" οnsubmit="submitTest();"> |
这样写,override方法的效果为:
java代码: |
Form.prototype.onsubmit = function() { submitTest(); }; |
在这里submitTest()虽然返回false,但我们只执行了此函数,没有对其结果进行任何处理。而
java代码: |
<form action="index.jsp" method="post" οnsubmit="return submitTest();"> |
override方法的效果为:
java代码: |
Form.prototype.onsubmit = function() { return submitTest(); }; |
这样,我们利用到了它的返回值,达到了预期效果。
这样理解的话我想印象会深刻得多,就不易出错了
结论:
我们可以用Java里的思维方式来思考模拟JavaScript中的类似情况(JavaScript中基于prototype的面向对象技术也确实是这样做的),但他们毕竟还是有本质上的区别,如Java是强类型的,有严格的语法限制,而JavaScript是松散型的。象上述方法:
java代码: |
Form.prototype.onsubmit = function() { }; |
既可以有返回值,又可以没有返回值,在Java里是通不过的,毕竟Java里面不能靠方法的返回值不同来重载(overload)方法,而JavaScript中的重载要松散得多。
转载来自:http://blog.163.com/hgj_online/blog/static/476742432007112610135845/
form表单的onsubmit() return问题相关推荐
- form表单的onsubmit()问题 集合
众所周知,在表单中加上οnsubmit="return false;"可以阻止表单提交. 下面是简单的一小段代码: java代码: 1 <form action=" ...
- form表单的onsubmit事件中调用方法时为什么前面加return
表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性,所以常会写道:<form action="/admin/addUser.do" metho ...
- 表单提交 onsubmit=return false
一般,后台程序员与表单打交道的时间是最多的. 最近在看老师考试系统的源码, 看到了有这么一段代码,当时不是很理解, google寻求帮助. 现在来总结一下. <form action=" ...
- Form表单提交前进行JS验证的3种方式
1. 提交按钮的onclick事件中验证 <script type="text/javascript"> function check(form) { ...
- form表单提交不刷新页面的方法
方法1:给form表单加onsubmit事件,值为return false; <form action="" method="post" οnsubmi ...
- html form表单提交前验证
可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. <HTML>& ...
- ajax提交,form表单提交,onsubmit=return checksubmit()提交验证
Ajax提交的两种方式: 一是url参数提交数据, 二是form提交(和平常一样在后台可以获取到Form表单的值).在所要提交的表单中,如果元素很多的话建议用第二种方式进行提交 一.Url参数提交数据 ...
- form表单的submit()和onsubmit()的区别
submit()和onsubmit()的区别 表单元素拥有submit方法,同时也具有onsubmit事件句柄,用于监听表单提交.可以使用elemForm.submit();方法触发表单提交. 1). ...
- form 表单 onsubmit 属性
Html中form表单有一个onsubmit属性: 当onsubmit的值为return true时,单击提交按钮,会直接打开action指定的连接 当onsubmit的值为return false时 ...
最新文章
- 安全性测试之认证授权
- Linux ubuntu中怎么生成随机数,随机数的生成
- 在3D世界中创建不同的相机模式——检查对象是否可见
- java 手势识别_java – 如何在Android中实现手势识别
- 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...
- SpringBoot(十) :邮件服务
- C++编写Windows服务程序
- Windows下底层数据包发送实战
- 惊呆了!这一操作将让NLP再次腾飞!
- Machine Learning lectures- 机器学习课程
- Python笔记-基础语法(个人资料整理)
- Linux安装PHPwind
- 一步一步教你 https 抓包
- 计算机同步不了计算机策略,修复sysvol netlog共享和组策略不同步组策略丢失等问题...
- rust连接不上社区服务器 显示超过时间,rust链接服务器超时
- Win10虚拟桌面使用技巧
- Ubuntu 出现/usr/bin/ld: cannot find -lXp的问题
- zzulioj1138: C语言合法标识符
- 前端JS获取图片文件的真实格式
- 【进阶技术】一篇文章搞掂:RibbitMQ
热门文章
- __attribute__((section(”name“)))的一些理解
- NAS实现家用服务器
- 数据驱动的营销方式和加拿大禁止Clearview AI
- windows程序设计相关思想
- 学计算机编程难吗,计算机编程入门 计算机编程难学吗
- Qt源码解析之QThread
- linux 运行脚本时报错:语法错误: 未预期的文件结尾
- 从js给html的form表单赋值,js获取form表单数据和form表单赋值
- Linux 安装httpd(apache)超详细教程
- 云上业务怎样更好地防御大流量攻击?