在项目中为一个表单(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. 动态规划(二维背包问题):UVAoj 473

     Raucous Rockers  You just inherited the rights to n previously unreleased songs recorded by the pop ...

  2. 尚学堂 JAVA DAY12 java程序执行时内存的分配

  3. .NET中的程序集(Assembly)

    在.NET 中,新引入了一个程序集的概念,就是指经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意 ...

  4. bzoj2243 sdoi2011 染色 paint

    明明是裸树剖 竟然调了这么久好蛋疼 大概是自己比较水的原因吧 顺便+fastio来gangbang #include<iostream> #include<cstring> # ...

  5. android scrollview组件禁止滑动的方法

    xml配置:           android:id="@+id/sc_freement"             android:layout_width="fill ...

  6. eclipse设置系统字体

    1. 打开eclipse-->Window-->Preferences-->General-->appearance-->Colors and Fonts, 点开后选择B ...

  7. [Angualr 2] Watch for changes

    You can watch for form / control changes by using .valueChanges.observe({...}): this.sku.valueChange ...

  8. [Angular 2] ng-model and ng-for with Select and Option elements

    You can use Select and Option elements in combination with ng-for and ng-model to create mini-forms ...

  9. Win7下Qt5.2中使用OpenGL的glu函数库无法使用的解决方案

          最近在Window7使用Qt5.2学习OpenGL时,出现了以OpenGL中glu开头的函数库无法使用的错误,例如: 'gluPerspective'  was not declared ...

  10. Swift: 类与结构体

    对比类与结构体 类与结构体有许多的相同点,它们都可以: 定义属性来存储值: 定义方法来提供功能: 定义下标操作: 定义初始化函数: 扩展它的默认的实现: 遵从协议: 类有一些额外的能力,但是结构体没有 ...