在项目中为一个表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性

所以常会写道:<form action="/admin/addUser.do" method="post" onsubmit="validateForm();">,试图在validateForm()中return false来阻止表单的提交。实际上的效果是即使return false 表单 还是会提交。

后来发现 onsubmit="return validateForm()"就没有问题了     在表单中加上onsubmit="return false;"可以阻止表单提交

  onsubmit=" checkForm(this);" 和 onsubmit="return checkForm(this);"的区别?

下面是简单的一小段代码:

java代码: 

<form action="index.jsp" method="post" onsubmit="submitTest();">
<INPUT value="www">
<input type="submit" value="submit">
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
function submitTest() {
// 一些逻辑判断
return false;
}
//-->
</SCRIPT>

 此种写法,点击submit按钮该表单照样会提交,为何?

原来onsubmit属性就像是<form>这个html对象的一个方法名,其值(一字符串)就是其方法体,默认返回true;和Java一样,在该方法体中你可以写任意多个语句,包括内置函数和自定义函数,如

java代码: 

onsubmit="

    alert('haha'); // 内置函数

    submitTest();  // 自定义函数

    alert(this.tagName); // 用到了this关键词

    ......(任意多条语句)   

    return false;

"

就相当于

Form.prototype.onsubmit = function() {

    alert('haha'); // 内置函数

    submitTest();  // 自定义函数

    alert(this.tagName); // 用到了this关键词

    ......(任意多条语句)   

    return false;

};

  这样的话你就覆写了(override)其默认方法(默认返回true)大家注意到方法体中可以用this这个关键词,这里即代表了<form>的对象实例。

经过这样的分析后,以上情况就不难理解了:

<form action="index.jsp" method="post" onsubmit="submitTest();">  这样写,override方法的效果为:
Form.prototype.onsubmit = function() {

    submitTest();

};

  在这里submitTest()虽然返回false,但我们只执行了此函数,没有对其结果进行任何处理。而

<form action="index.jsp" method="post" onsubmit="return submitTest();">

  override方法的效果为:

Form.prototype.onsubmit = function() {

    return submitTest();

};

  这样,我们利用到了它的返回值,达到了预期效果。

  其实form中有一个方法是对form表单中的数据进行校验.但是需要点击submit按钮才能触发这个校验

<html>
<head>
<script>
function checkForm(form) {
if(form['nameId'].value == "") { alert("姓名不能为空!");
return false;
}
return true;
}
</script>
</head>
<body> <form id="formId" action="www.baidu.com" onsubmit="return checkForm(this)">
请输入姓名:<input type="text" id="nameId"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

2.在js中调用onsubmit方法

function checkForm(form){
if(form['o.NSfk'].value=="") {
alert("实付款为空!");
return false;
}
if(form['o.DFksj'].value=="") {
alert("收款日期为空!");
return false;
}
return true; }
function tijiao() {
var form = document.getElementById("productFormId");
if(form.onsubmit()==false) {
return;
}
form.submit(); }

注意:onsubmit事件在提交数据成功后触发,即在出发action之后触发

在javascript中定义一个函数:
function f(){
return false; } <form action="text.html" onsubmit="f()">
<input type="text" ............/> <input type="submit" value="点击提交"...../> </form> f()返回的是false为啥点击提交的时候还能跳到text.html?
解答:
onsubmit事件在提交数据成功后触发,你如果要阻止提交的话可以这样:
<input type="submit" value="点击提交" onclick="return f()" />
这样在提交前就阻止了点击事件

表单数据校检方法 onsubmit()的使用?的更多相关文章

  1. session_start()导致history.go(-1)返回时无法保存表单数据的解决方法

    问题背景: 在填写完表单提交时,由于某个表单项可能填写的不合法,导致提交失败,返回表单页面.但返回后所有的表单都被清空了,重新填写比较麻烦,度娘解释说,是由于每个页面都调用了session_start ...

  2. django的FormView中,自定义初始化表单数据的曲折方法

    这个技巧,主要是用于表单初始化及回显. 也就是说,如果用户的数据库里有数据,则要将相应的数据显示在表单里, 如果用户的数据库里没有数据,才会生成一个空白的表单给用户, 这样才显得专业塞! 而我面对的尴 ...

  3. jquery表单数据验证扩展方法

    /** 表单数据验证 **/ $.fn.Validform = function () { var Validatemsg = ""; var Validateflag = tru ...

  4. 表单数据验证方法(二)——ASP.NET后台验证

    昨天写了一下关于如何在前台快捷实现表单数据验证的方法,今天接着昨天的,把后台实现数据验证的方法记录一下.先说明一下哈,我用的是asp.net,所以后台验证方法也是基于.net mvc来做的. 好了,闲 ...

  5. Action 中获取表单数据的三种方式

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53138905  冷血之心的博客) Action 中获取表单提交数据 ...

  6. Servlet 响应 响应相关与重定向 请求 获取表单数据2种方法

    一.HttpServletResponse  (响应) 包括下面三个: 1.响应消息行  HTTP/1.1  200 OK 200是HTTP状态码, 代表请求已成功. (查httpservletres ...

  7. TableView 校检表

    这俩天学习了tableView 校检表 主要就是通过一个方法来跟踪当前选中的行.下面将声明一个NSIndexPath 的属性来跟踪最后选中的行.这篇文章希望能给那些初学者带来学习的乐趣.不说了直接上代 ...

  8. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

  9. ASP.NET MVC中在Action获取提交的表单数据方法总结 (4种方法,转载备忘)

    有Index视图如下: 视图代码如下: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Mas ...

随机推荐

  1. 分治(CDQ):[BOI2007]摩基亚Mokia

    [题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...

  2. NeoOcean - Unity3D Ocean Waves Simulation

    GMail: bearworks8@gmail.com QQMail:196221347@qq.com QQ Group:391782326 Dropbox Demo:  https://www.dr ...

  3. Interesting Punch-Bowl(优先队列)

    /** http://acm.nyist.net/JudgeOnline/problem.php?pid=547 题意: 有一个正方形的区域 区域上面有高度不同的1*1的立方体自然有凸有凹 凹的地方可 ...

  4. 借助github搭建自己的博客

    创建GitHub技术博客全攻略 通过GitHub Pages建立个人站点(详细步骤) 备注: 我搭建成功了,但是访问时只能使用"http://username.github.io/usern ...

  5. Java 类加载机制详解

    一.类加载器 类加载器(ClassLoader),顾名思义,即加载类的东西.在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘.网络或其他来源加载到内存中,并对字节码进行解 ...

  6. Lost's revenge - HDU 3341 (自动机+DP)

    题目大意:先给你一些子串,然后给你一个母串,母串里面的字母可以任意调换位置,问最多这个母串经过一些位置变动最多能包含多少个子串.   分析:可以比较明显的看出来的DP,先求出来ATGC分别有多少,然后 ...

  7. TCP/IP源码(59)——TCP中的三个接收队列

    http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列  作者:gfree.wind@gmai ...

  8. 4道过滤菜鸟的iOS面试题

    网上已经有很多针对各种知识点的面试题,面试时有些人未必真正理解也能通过背题看上去很懂.我自己总结了4道面试题,好快速的判断这个人是否是一个合格的工程师,欢迎大家点评. 1.struct和class的区 ...

  9. Verilog之event的用法

    编写verilog的testbench时,可使用event变量触发事件. event变量声明为: event var; event触发为: ->var; 捕获触发为: @(var); 在mode ...

  10. Python简易爬虫

    经常需要下载论文,每次都需要去网页上搜索,然后点击下载,实在麻烦,正好最近刚入门Python,心血来潮,想着写一个爬虫 经过一天查阅资料,基本算是完成了,但是还是不足,比如对知网和万方暂时还不行,但是 ...