表单允许客户端的用户以标准格式向服务器提交数据。表单的创建者为了收集所需数据,使用了各种控件设计表单如 INPUT 或 SELECT。查看表单的用户只需填充数据并单击提交按钮即可向服务器发送数据。服务器上的脚本会处理这些数据。

表单由三个重要属性action,method,onsubmit。
action:规定当提交表单时,向何处发送表单数据。
method:规定如何发送表单数据。
onsubmit:当表单被提交时执行脚本。

页面提交表单的数据是不可信任的,js脚本验证作为辅助验证,嘿嘿,防君子不防小人。后台需要对表单提交数据判断。全部正确跳转到成功页,否则,跳转到辅助性的提示页(记录这些非法操作的用户)。

示例如下图所示:

主要讲述表单提交关于onsubmit那些事
一般方法:使用onsubmit="return check()"对表单的值进行验证。
对输入的姓名,手机号,备注进行验证。
示例如下图所示(check图一):

                                              check图一

也可以指定表单ID绑定onsubmit事件
示例如下图所示(check图二):

                                              check图二

这两个主要区别:
一、绑定事件的方式不同。check图二中蓝色方框处是这两种绑定事件的最大区别,当任一个判定条件不通过时阻止浏览器默认行为。
二、check图一中的“return false”和check图二中的“return”也是亮点哈。
check图一中的“return false”的作用是函数check()返回布尔值false,传给onsubmit中 return check(),阻止浏览器提交。 
check图二中的“return”的作用是当某个判断条件不符合时,return返回,不执行后面的。

关于js代码简单分析,如下:

var mform = {
// 获取ID
$: function(){
return document.getElementById(arguments[0]);
},
// 阻止浏览器默认行为
stopDefault: function(){
if(event && event.preventDefault){
event.preventDefault();
}
else{
window.event.returnValue = false;
}
},
// 绑定事件 elem指ID,type指事件类型,fn指函数
addEvent: function(elem,type,fn){
if(elem.addEventListener){
elem.addEventListener(type, fn, false);
}
else if(elem.attachEvent) {
elem.attachEvent("on" + type, fn);
}
else{
elem["on" + type] = fn;
}
},
// 设置元素的文本值
text: function(elem,str){
if(!!elem.innerText){
elem.innerText = str;
}
else if(!!elem.textContent){
elem.textContent = str;
}
},
// 过滤左右空格
trim: function(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
},
// 判断是否为汉字,true时为汉字
isCNCharacter: function(str){
if(/.*[\u4e00-\u9fa5]+.*$/.test(str)){
return true;
}
else{
return false;
}
},
// 判断是否为手机号,true时为手机号
isTelNum: function(str){
if(/^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str)){
return true;
}
else {
return false;
}
},
// 初始化事件
init: function(){
var _this = this;
_this.check();
},
// 为表单绑定事件
check: function(){
var _this = this;
var name = _this.$("userName"),
nameErr = _this.$("userNameErr"),
tel = _this.$("tel"),
telErr = _this.$("telErr"),
remark = _this.$("remark"),
remarkErr = _this.$("remarkErr"),
kform = _this.$("kform");
_this.addEvent(kform,"submit",function(){
var nameVal = name.value,telVal = tel.value,remarkVal = remark.value;
if((!_this.isCNCharacter(nameVal)) || (!_this.isTelNum(telVal)) || (_this.trim(remarkVal).length < 6)){
_this.stopDefault();
}
if(_this.trim(nameVal).length===0){
_this.text(nameErr,"姓名不能为空!");
return;
}
else if(!_this.isCNCharacter(nameVal)){
_this.text(nameErr,"仅限中文名字!");
return;
}
else{
_this.text(nameErr,"");
}
if(_this.trim(telVal).length === 0){
_this.text(telErr,"手机号码不能为空!");
return;
}
else if(!_this.isTelNum(telVal)){
_this.text(telErr,"手机号码不正确!");
return;
}
else{
_this.text(telErr,"");
}
if(_this.trim(remarkVal).length < 6){
_this.text(remarkErr,"不能少于6个字!");
return;
}
});
}
} mform.init();

表单源码如下:

 <?php
$action = $_SERVER["PHP_SELF"]; $name = "";
$nameErr = "";
$isname = false;
$tel = "";
$telErr = "";
$istel = false;
$remark = "";
$remarkErr = "";
$isremark = false; if(isset($_POST["submit"])){
$name = $_POST["userName"];
$tel = $_POST["tel"];
$remark = $_POST["remark"]; if(empty($name)){
$nameErr = "姓名不能为空!";
} else if(!preg_match("/^[\x7f-\xff]+$/", $name)){
$nameErr = "仅限中文名字!";
}
else{
$isname = true;
} if(empty($tel)){
$telErr = "手机号码不能为空!";
} else if(!preg_match("/^1[3|4|5|6|7|8|9][0-9]{9}$/", $tel)){
$telErr = "手机号码不正确!";
}
else{
$istel = true;
} if(strlen($remark)<6){
$remarkErr = "不能少于6个字!";
}
else{
$isremark = true;
} if($isname && $istel && $isremark){
header("Location: result.php");
}
else{
// 记录用户信息
}
}
?> <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>表单提交</title>
<style>
*{margin:0px;padding:0px;color:#000;font-size:14px;line-height:20px;background: #fff;}
.kform{width: 600px; margin: 60px auto; border: 1px solid #999; padding: 20px;}
.kform .item{ margin-bottom: 10px; vertical-align: middle;}
.kform .item span{display: inline-block;width: 80px;text-align: right; margin-right: 10px; }
.kform .big span,.kform .big .err{vertical-align: top;}
.kform .item .txt{width: 180px; height: 30px; line-height: 30px; border: 1px solid #999; text-indent: 6px; vertical-align: middle;}
.kform .item .err{color: #f00; margin-left: 10px;}
.kform .item textarea{width: 300px; height: 80px; overflow: hidden; border: 1px solid #999;padding: 6px; resize: none;}
.kform .item .btn{ display: inline-block; padding: 10px 20px; background: #f60; color: #fff; border: none; border-radius: 3px; cursor: pointer;}
</style>
</head>
<body>
<form id="kform" class="kform" action="<?php echo $action; ?>" method="POST" >
<div class="item">
<span>姓名:</span>
<input id="userName" class="txt" type="text" name="userName" value="<?php echo !empty($name)?$name:''; ?>" maxLength="10" placeholder="中文姓名" />
<label id="userNameErr" class="err"><?php echo !empty($nameErr)?$nameErr:" "; ?></label>
</div>
<div class="item">
<span>电话:</span>
<input id="tel" class="txt" type="text" name="tel" value="<?php echo !empty($tel)?$tel:''; ?>" maxLength="11" placeholder="手机号码" />
<label id="telErr" class="err"><?php echo !empty($telErr)?$telErr:" "; ?></label>
</div>
<div class="item big">
<span>备注:</span>
<textarea id="remark" name="remark" placeholder="至少6个字" maxLength="100"><?php echo !empty($remark)?$remark:''; ?></textarea>
<label id="remarkErr" class="err"><?php echo !empty($remarkErr)?$remarkErr:" "; ?></label>
</div>
<div class="item">
<span>&nbsp;</span>
<input class="btn" name="submit" type="submit" value="确定" />
</div>
</form>
<script>
var mform = {
// 获取ID
$: function(){
return document.getElementById(arguments[0]);
},
// 阻止浏览器默认行为
stopDefault: function(){
if(event && event.preventDefault){
event.preventDefault();
}
else{
window.event.returnValue = false;
}
},
// 绑定事件 elem指ID,type指事件类型,fn指函数
addEvent: function(elem,type,fn){
if(elem.addEventListener){
elem.addEventListener(type, fn, false);
}
else if(elem.attachEvent) {
elem.attachEvent("on" + type, fn);
}
else{
elem["on" + type] = fn;
}
},
// 设置元素的文本值
text: function(elem,str){
if(!!elem.innerText){
elem.innerText = str;
}
else if(!!elem.textContent){
elem.textContent = str;
}
},
// 过滤左右空格
trim: function(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
},
// 判断是否为汉字,true时为汉字
isCNCharacter: function(str){
if(/.*[\u4e00-\u9fa5]+.*$/.test(str)){
return true;
}
else{
return false;
}
},
// 判断是否为手机号,true时为手机号
isTelNum: function(str){
if(/^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str)){
return true;
}
else {
return false;
}
},
// 初始化事件
init: function(){
var _this = this;
_this.check();
},
// 为表单绑定事件
check: function(){
var _this = this;
var name = _this.$("userName"),
nameErr = _this.$("userNameErr"),
tel = _this.$("tel"),
telErr = _this.$("telErr"),
remark = _this.$("remark"),
remarkErr = _this.$("remarkErr"),
kform = _this.$("kform");
_this.addEvent(kform,"submit",function(){
var nameVal = name.value,telVal = tel.value,remarkVal = remark.value;
if((!_this.isCNCharacter(nameVal)) || (!_this.isTelNum(telVal)) || (_this.trim(remarkVal).length < 6)){
_this.stopDefault();
}
if(_this.trim(nameVal).length===0){
_this.text(nameErr,"姓名不能为空!");
return;
}
else if(!_this.isCNCharacter(nameVal)){
_this.text(nameErr,"仅限中文名字!");
return;
}
else{
_this.text(nameErr,"");
}
if(_this.trim(telVal).length === 0){
_this.text(telErr,"手机号码不能为空!");
return;
}
else if(!_this.isTelNum(telVal)){
_this.text(telErr,"手机号码不正确!");
return;
}
else{
_this.text(telErr,"");
}
if(_this.trim(remarkVal).length < 6){
_this.text(remarkErr,"不能少于6个字!");
return;
}
});
}
} mform.init();
</script>
</body>
</html>

关于form表单onsubmi提交的更多相关文章

  1. JavaScript 创建一个 form 表单并提交

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  2. 使用ajax方法实现form表单的提交(附源码)

    写在前面的话 在使用form表单的时候,一旦点击提交触发submit事件,一般会使得页面跳转,页面间的跳转等行为的控制权往往在后端,后端会控制页面的跳转及数据传递,但是在某些时候不希望页面跳转,或者说 ...

  3. form表单js提交

    form表单js提交      $('#form1').submit(); 延迟form表单提交 function submitcheck() { $('#light').css('display', ...

  4. 微信自带浏览器不支持form表单post提交方案解决

      微信自带浏览器form表单post提交,Java控制后台获取不到值得解决方案: 第一种:把post改成get请求,但是改后另一个问题来了就是,数据不安全了,连接上都能看到,导致数据会流失,Java ...

  5. 利用 ajax自定义Form表单的提交方式

    需求场景:有时候单纯的form表单无法向后端传递额外的参数 比如需要action传递js异步生成的参数 ,form表单默认的action就无法满足需求,这时就需要我们自定义form表单的提交方式. h ...

  6. form表单的提交方式

    开发中表单提交是很常见的,表单的提交方式也多种方式. 1.使用submit按钮提交表单  <input type="submit"/> <!DOCTYPE htm ...

  7. 使用ajax方法实现form表单的提交

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 写在前面的话 在使用form表单的时候,一旦点击提交触发submit ...

  8. JavaWeb学习总结(十一):Session解决form表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  9. 基于form表单submit提交不跳转

    方法一:target <html> <body> <form action="" method="post" target=&qu ...

随机推荐

  1. C#如何删除数组中的一个元素

    C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个 ...

  2. sphinx/Coreseek 4.1 执行make出错

    参考的网址: http://blog.csdn.net/jcjc918/article/details/39032689 configure正确之后,执行make,出现如下的报错信息 configur ...

  3. Android——Fragment过度动画分析一(转)

    Sliding Fragment 作者:小文字 出处:http://www.cnblogs.com/avenwu/   介绍:该案例为传统的Fragment增加了个性化的补间动画,其效果是原有frag ...

  4. Android——自定义视图(一)转

    首先,建立一个Android工程,命名MyView. 然后,自定义一个类myView,继承View类.代码如下 package com.android.randy.viewDemo; import a ...

  5. keras系列︱图像多分类训练与利用bottleneck features进行微调(三)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72861152 中文文档:http://keras-cn.readthedocs.io/ ...

  6. [LeetCode]460.LFU缓存机制

    设计并实现最不经常使用(LFU)缓存的数据结构.它应该支持以下操作:get 和 put. get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1.put(key, valu ...

  7. openCV—Python(5)—— 图像几何变换

    一.函数简单介绍 1.warpAffine-图像放射变换(平移.旋转.缩放) 函数原型:warpAffine(src, M, dsize, dst=None, flags=None, borderMo ...

  8. android开发(27) 看看我的手机里都有什么传感器

    想看看我的HTC ONE x 具有什么传感器.写个代码RUN一下. 代码很简单,直接贴了 package zyf.demo.sensordemo; import java.util.List; imp ...

  9. 局域网内的机器不能ping通虚拟机,但是虚拟机可以ping通局域网的机器

    将虚拟机的网络网络适配器模式改成桥接模式即可: 一.选择虚拟机里面的设置: 二.在虚拟机设置界面将网络适配器模式改成桥接模式

  10. 【异常】IOException parsing XML document from class path resource [xxx.xml]

    1.IDEA导入项目运行出现异常 org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing ...