以前在项目中为一个表单(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问题相关推荐

  1. form表单的onsubmit()问题 集合

    众所周知,在表单中加上οnsubmit="return false;"可以阻止表单提交. 下面是简单的一小段代码: java代码: 1 <form action=" ...

  2. form表单的onsubmit事件中调用方法时为什么前面加return

    表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性,所以常会写道:<form action="/admin/addUser.do" metho ...

  3. 表单提交 onsubmit=return false

    一般,后台程序员与表单打交道的时间是最多的. 最近在看老师考试系统的源码, 看到了有这么一段代码,当时不是很理解, google寻求帮助. 现在来总结一下. <form action=" ...

  4. Form表单提交前进行JS验证的3种方式

    1. 提交按钮的onclick事件中验证 <script type="text/javascript">          function check(form) { ...

  5. form表单提交不刷新页面的方法

    方法1:给form表单加onsubmit事件,值为return false; <form action="" method="post"  οnsubmi ...

  6. html form表单提交前验证

    可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. <HTML>& ...

  7. ajax提交,form表单提交,onsubmit=return checksubmit()提交验证

    Ajax提交的两种方式: 一是url参数提交数据, 二是form提交(和平常一样在后台可以获取到Form表单的值).在所要提交的表单中,如果元素很多的话建议用第二种方式进行提交 一.Url参数提交数据 ...

  8. form表单的submit()和onsubmit()的区别

    submit()和onsubmit()的区别 表单元素拥有submit方法,同时也具有onsubmit事件句柄,用于监听表单提交.可以使用elemForm.submit();方法触发表单提交. 1). ...

  9. form 表单 onsubmit 属性

    Html中form表单有一个onsubmit属性: 当onsubmit的值为return true时,单击提交按钮,会直接打开action指定的连接 当onsubmit的值为return false时 ...

最新文章

  1. 安全性测试之认证授权
  2. Linux ubuntu中怎么生成随机数,随机数的生成
  3. 在3D世界中创建不同的相机模式——检查对象是否可见
  4. java 手势识别_java – 如何在Android中实现手势识别
  5. 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...
  6. SpringBoot(十) :邮件服务
  7. C++编写Windows服务程序
  8. Windows下底层数据包发送实战
  9. 惊呆了!这一操作将让NLP再次腾飞!
  10. Machine Learning lectures- 机器学习课程
  11. Python笔记-基础语法(个人资料整理)
  12. Linux安装PHPwind
  13. 一步一步教你 https 抓包
  14. 计算机同步不了计算机策略,修复sysvol netlog共享和组策略不同步组策略丢失等问题...
  15. rust连接不上社区服务器 显示超过时间,rust链接服务器超时
  16. Win10虚拟桌面使用技巧
  17. Ubuntu 出现/usr/bin/ld: cannot find -lXp的问题
  18. zzulioj1138: C语言合法标识符
  19. 前端JS获取图片文件的真实格式
  20. 【进阶技术】一篇文章搞掂:RibbitMQ

热门文章

  1. __attribute__((section(”name“)))的一些理解
  2. NAS实现家用服务器
  3. 数据驱动的营销方式和加拿大禁止Clearview AI
  4. windows程序设计相关思想
  5. 学计算机编程难吗,计算机编程入门 计算机编程难学吗
  6. Qt源码解析之QThread
  7. linux 运行脚本时报错:语法错误: 未预期的文件结尾
  8. 从js给html的form表单赋值,js获取form表单数据和form表单赋值
  9. Linux 安装httpd(apache)超详细教程
  10. 云上业务怎样更好地防御大流量攻击?