form表单自动提交规则

  1. form表单中只有一个type=text的input,在input中按enter键,会自动提交;
  2. form表单中有多个type=text的input,且无type=submit的按钮元素,则在input中按enter键,不会自动提交
  3. form表单中有type=submit的按钮元素,点击按钮元素或者在input中按enter键,会自动提交
  4. form表单中有type=button的按钮元素且有多个input元素,点击按钮元素或者在input中按enter键,不会自动提交

form表单提交方法总结

方法一:浏览器默认提交表单的方法

<form action="/login" method="post" onsubmit="return toValid();">
<input type="text" name="phone" placeholder="请输入手机号" />
<input type="password" name="password" placeholder="输入密码" />
<button type="submit">登录</button>
</form>

通过点击type="submit"的提交按钮来触发form表单的onsubmit事件。form表单自动提交规则1,3也是通过触发onsubmit事件来进行表单提交的。因此,若要阻止表单提交,可以通过return false;,当return true;时则会提交表单;通常我们会在html代码中返回一个函数,函数通过验证表单数据的完整性来决定返回true或者false。这里的提交按钮既可以是button标签也可以是input标签,只要type="submit"就可以。

需要注意的是,<input type="submit" value="提交" name="btn" /><button type="submit" name="btn" value="提交">提交</button>这两种方式会导致浏览器将value作为name对应的值提交给服务器。因此最好不要这样使用。另外,button和input的相似之处不止于此,button也可以设置type=reset,此时点击按钮会导致表单被重置。

方法二:submit()方法

该方法是用js来实现对表单的提交,但是表单的 onsubmit 事件句柄不会被调用,该方法一般用于通过点击某个普通按钮来进行表单提交。例如:

document.getElementById('form-id').submit();
document.myForm.submit();//通过表单的name属性值来获取表单元素
document.forms['formName'].submit();//通过返回当前文档中<form>元素的集合来获取表单元素

这两种方法都需要指定action属性和method方法(默认是get),才能把数据以正确的方法发送到指定的服务器地址,否则将会出现404页面。

方法三:ajax方式进行异步提交

前两种方式会使得页面跳转,后端会控制页面的跳转及数据传递,但是在某些时候不希望页面跳转,或者说想要将控制权放在前端,通过js来操作页面的跳转或者数据变化。这个时候就需要用到ajax异步提交并获取数据了,目前现在很多网站也是采用这种方法。通过XMLHttpRequest生成的请求可以有两种方式来获取数据,异步模式或同步模式。请求的类型是由这个XMLHttpRequest对象的open()方法的第三个参数async的值决定的。如果该参数的值为false,则该XMLHttpRequest请求以同步模式进行,否则该过程将以异步模式完成。

例如:

let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
let resText = JSON.parse(xhr.responseText);
if(resText.code == 1) {
//其他操作
}
}
}
}
xhr.open('POST','/api/code',true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//在这里来设置
xhr.send(`phone=${phoneNumber.value}`);

区别:表单提交时,页面是整体刷新,且由后端来控制页面跳转;而ajax方式提交时,页面是局部刷新,可由js来控制页面跳转。

文件上传的三种方法

方法一:利用表单实现文件上传

注意:1:post方式提交, 2:enctype="multipart/form-data"

方法二:使用ajax和FormData对象异步上传文件

例如:代码来自MDN

var form = document.forms.namedItem("fileinfo");
form.addEventListener('submit', function(ev) {
var oOutput = document.querySelector("div"),
oData = new FormData(form); oData.append("CustomField", "This is some extra data"); var oReq = new XMLHttpRequest();
oReq.open("POST", "stash.php", true);
oReq.onload = function() {
if (oReq.status == 200) {
oOutput.innerHTML = "Uploaded!";
} else {
oOutput.innerHTML = "Error " + oReq.status + " occurred when trying to upload your file.<br \/>";
}
}; oReq.send(oData);
ev.preventDefault();
}, false);

方法三:iframe上传

未使用过这种方法,google搜索怎么实现。

js阻止form表单自动提交方法

方法一:return false;

方法二:event.preventDefault();这种方法一般是用在监听form表单的submit事件或者监听提交按钮的点击事件从而获取到事件对象event。

关于form与表单操作的更多相关文章

  1. ExtJs 第二章,Ext.form.Basic表单操作

    1.认识Ext.form.Panel表单面板         Ext.form.field.CheckBox 复选框 checkboxfield Ext.form.CheckBoxGroup 复选框组 ...

  2. 基于JQuery的前端form表单操作

    Jquery的前端表单操作:     jquery提供了良好的方法封装,在一些基本的操作的时候,能节省很多的麻烦,其中,在具体使用时,form表单的数据提交是最频繁也最常见的前后数据交换方式,所以在前 ...

  3. 关于form与表单提交操作的一切

    原文链接:http://caibaojian.com/form.html 你知道,一个表单里面只要有form元素,如果没有给action加一个默认值,为空白的时候,当你刷新页面时,会弹出一个警告框提示 ...

  4. Django之form表单操作

    小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...

  5. 【JavaScript】DOM之表单操作

    DOM 表单操作 1.获取表单 获取表单元素 以Document对象中forms属性来获取当前HTML页面所有表单集合以Document对象中表单的name属性值来获取表单元元素 <body&g ...

  6. 解析:使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象

    之前开发时遇到的一个问题,使用easyui的form提交表单,在Chrome下时没问题的,但是在IE下出现类似附件下载时提示是否保存的现象. 这里记录一下如何解决的.其实这个现象不光是easyui的f ...

  7. 阻止form空表单提交----JavaScript

    网上看到很不错的阻止form空表单提交 第一种方法 <div class="warp"> <h2>登录到pfan空间</h2> <p> ...

  8. form注册表单圆角 demo

    form注册表单圆角 <BODY> <div class="form"> <ul class="list"> <li& ...

  9. Form提交表单页面不跳转

    1.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

随机推荐

  1. Razor Pages with ASP.NET Core 2

    With ASP.NET Core 2 we get another way of building web applications. It’s one of those new things th ...

  2. 51-node-1649齐头并进(最短路)

    题意:中文题,没啥坑点: 解题思路:这道题一开始以为要跑两个最短路,后来发现不用,因为如果给定了铁路的线路,那么,公路一定是n个节点无向图的补图,所以,铁路和公路之间一定有一个是可以直接从1到n的,我 ...

  3. ubuntu18.04系统下用devstack安装openstack(最新版)

    ubuntu18.04系统下用devstack安装openstack(最新版) 2018年12月14日 16:34:14 Cherls 阅读数:427   前期准备: 安装git,升级pip,其他 s ...

  4. 在 Activity 中实现 getContentView 操作

    2017/9/8 17:17:03   前言     最近接到个需要优化Android原生系统设置APK的任务.这个任务里面有一个更换应用背景图片的需求.我手里的这个设备是一个平板设备,使用了一下这个 ...

  5. BZOJ2463[中山市选2009]谁能赢呢?——博弈论

    题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问 ...

  6. PHP——运行shell命令|脚本

    内置函数 PHP | 系统程序执行 exec shell_exec passthru system 配置 打开php.ini配置文件,并从disable_function将用到的函数从禁用中删除,然后 ...

  7. 第十九天 标准目录与time 模块

      今日内容 1.目录规范 ***** (1)文件夹的规范写法 bin 可执行文件 conf 配置文件 core 主要业务逻辑 db 数据文件 lib 库 (公共代码 第三方模块) log 日志文件 ...

  8. Machine Schedule POJ - 1325(水归类建边)

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17457   Accepted: 7328 ...

  9. HDU - 3917(朴素LIS + 最大流)

    题意: 求出所有的最长上升子序列的个数且每个元素只能用一次 解析: 呵...呵...呵..呵..emm... 再见 我死了...wa了15发之后...原来不能用~  要用 != EOF 这题算水题吧. ...

  10. anaconda4.2.0

    上改完cv2那个文件夹后,发现在使用导入的cv2中的方法时没有代码提示,于是搞啊搞,终于让我搞坏了mmp,这也太脆弱了. 无奈组装了一个全新的方法 过程比较坎坷也就没怎么记录 我的版本是选择最后一个o ...