HTTP-request
1.HTTP协议
概念:Hyber Text Transfer Protocal 超文本传输协议
定义了客户端和服务器端通信时,发送数据的格式
特点:
- 基于TCP/IP的高级协议
- 默认端口号80
- 基于请求/响应模型:一次请求对应一次响应
- 无状态:每次请求之间相互独立,不能交互数据
历史版本
- 1.0版本:每次请求都会重新建立连接
- 1.1版本:复用连接
2.HTTP请求消息数据格式
请求行
请求方式 请求url 请求协议/版本
- GET
- 请求参数在请求行中,在url后
- 请求的url长度有限制
- POST
- 请求参数在请求体中
- 请求的url长度没有限制
- GET
请求头:请求头名称:请求头值,键值对格式
- Host:请求的主机
- User-Agent:浏览器告诉服务器浏览器版本信息。可以在服务器端获取该头的信息,解决浏览器的兼容性问题
- Accept:本浏览器可以接受的资源格式
- Accept-Lanuage:支持语言环境
- Accept-Encoding:压缩格式
- Referer:告诉服务器,当前请求从哪里来。
- 防盗链
- 统计工作
请求空行
空行,分割POST请求消息的请求头和请求体
请求体(正文)
- 封装POST请求消息的请求参数
3.请求响应原理
- tomcat服务器会根据请求url中的资源路径,创建对应的servlet对象。
- tomcat服务器会创建request和response对象,request对象中封装请求消息数据。
- tomcat将request和response两个对象传递给service方法,并且调用service
- 在service方法中可以通过request对象获取请求消息数据,通过response对象设置响应消息数据。
- 服务器在给浏览器做出响应之前,会从response对象中取设置的响应消息数据。
4.request对象
4.1request对象继承体系结构
- ServletRequest:接口
- HttpServletRequest:接口,继承ServletRequest
- org.apache.catalina.connector.RequestFacade:实现HttpServletRequest接口
4.2request功能
获取请求消息数据
获取请求行数据
eg. GET /test/demo?name=zhangsan HTTP/1.1
获取请求方式:String getMethod(); GET
获取虚拟目录:String getContextPath(); /test
获取Servlet路径:String getServletPath(); /demo
获取GET方式请求参数:String getQueryString(); name=zhangsan
获取请求URI(统一资源标识符):String getRequestURI(); /test/demo
获取请求URL(统一资源定位符):String getRequestURL(); http://localhost:8080/test/demo
获取请求协议:String getProtocol: HTTP/1.1
获取客户机的IP地址:String getRemoteAddr();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class requestdemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getMethod());
System.out.println(request.getContextPath());
System.out.println(request.getServletPath());
System.out.println(request.getQueryString());
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
System.out.println(request.getProtocol());
System.out.println(request.getRemoteAddr());
}
}
/*输入的链接:http://localhost:8080/test/requestdemo1?name=zhangsan
GET
/test
/requestdemo1
name=zhangsan
/test/requestdemo1
http://localhost:8080/test/requestdemo1
HTTP/1.1
0:0:0:0:0:0:0:1
*/- 获取请求头数据
- String getHeader(String name):通过请求头的名称获取请求头的值
- Enumeration < String >getHeaderNames():获取所有的请求头名称
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class requestdemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求头数据
//获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
String name = headerNames.nextElement();
//根据名称获取请求头的值
String value = request.getHeader(name);
System.out.println(name+"---->"+value);
}
//简单防盗链
String referer = request.getHeader("referer");
System.out.println(referer);
// http://localhost/test/requestdemo2
if (referer!=null){
if (referer.contains("/test")){
System.out.println("播放");
}else{
System.out.println("不播放");
}
}
}
}
获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤
(1) 获取流对象,字节流或字符流
- BufferedReader getReader():获取字符输入流,只能操作字符数据
- ServletInputStream():获取字节输入流,可以操作所有数据类型
1
2
3
4
5
6
7
8
9protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求消息体
BufferedReader br = request.getReader();
//读取数据
String line = null;
while ((line= br.readLine())!=null){
System.out.println(line);
}
}(2) 从流对象中拿数据
获取请求参数通用方式
String getParameter(String name):根据参数名称获取参数值 username=hxx
String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=yy
Enumeration< String >getParameterNames():获取所有请求的参数名称
Map< String,String[] > getParameterMap():获取所有参数的map集合
中文乱码问题:
get方式:tomcat8已经将get方式乱码问题解决
post方式:会乱码,需要在获取参数前设置编码 request.setCharacterEncoding(“utf-8”);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置流的编码,要和所对应的页面格式相同
request.setCharacterEncoding("utf-8");
//POST 请求参数
//根据参数名称获取参数值
String username = request.getParameter("username");
System.out.println(username);
String[] hobbies = request.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
//获取所有请求参数的名称
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
//参数名字
String name = parameterNames.nextElement();
//根据参数名字获取参数值
String parameter = request.getParameter(name);
System.out.println(name+"---->"+parameter);
}
//获取所有参数的map集合
Map<String, String[]> parameterMap = request.getParameterMap();
//获取键值
Set<String> keySet = parameterMap.keySet();
//根据键值获取值
for (String name : keySet) {
String[] values = parameterMap.get(name);
for (String value : values) {
System.out.println(value);
}
}
}请求转发:一种在服务器内部的资源跳转方式
通过request对象获取请求转发器对象
RequestDispatcher getRequestDispacher(String path):参数为转发资源的路径
使用RequestDispatcher对象进行转发
forward(ServletRequest request, ServletResponse response)
1
request.getRequestDispatcher("/requestdemo5").forward(request,response);
- 特点
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器内部资源中
- 转发是一次请求
共享数据
- 域对象:一个有作用范围的对象,可以在范围内共享数据
- request域:代表一次请求,一般用于请求转发的多个资源中共享数据
- 方法
- setAttribute(String name,Object obj):存储数据
- Object setAttribute(String name):通过键获取值
- removeAttribute(String name):通过键移除键值对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class requestdemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置request域
request.setAttribute("msg","hxx");
//转发到demo5
request.getRequestDispatcher("/requestdemo5").forward(request,response);
}
}
public class requestdemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo5--------");
//获取request域值
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
}
获取ServletContext对象
- servletContext getServletContext()
Servlet基本原理和配置
1.Servlet概述
概念:server applet,运行在服务器端的小程序
- servlet是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则
- 自定义类,实现servlet接口,复写方法
简单项目
创建按JavaEE项目
定义一个类,实现servlet接口
- 注:将tomcat安装目录下的bin/servlet-api.jar包导入项目中
public class servletdemo1 implements Servlet
实现接口中的抽象方法
在web.xml文件中配置servlet ,写在根标签里
1
2
3
4
5
6
7
8
9
10
11
12<servlet>
<!--给servlet取名,任意 -->
<servlet-name>demo</servlet-name>
<!-- 指明servlet路径,包名.类名 -->
<servlet-class>cn.hxx.servletdemo1</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet映射,必须与servlet-name同名 -->
<servlet-name>demo</servlet-name>
<!--这是浏览器中输入的访问该servlet的url-->
<url-pattern>/hxx</url-pattern>
</servlet-mapping>servlet注解配置方法
在实现类前面加注解 @WebServlet(资源路径)
2.执行原理
当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
查找web.xml文件,是否有对应的
<url-pattern>
标签体内容如果有,则再找到对应的
<servlet-class>
全类名tomcat将字节码文件加载进内存,并且创建其对象
调用方法
3.生命周期
- 被创建:执行init方法,只执行一次
- 默认情况下,第一次被访问时,servlet被创建
- 可以配置执行Servlet的创建时机:在web.xml中
<servlet>
标签体中配置
1.第一次被访问时,创建,<load-on-startup>
的值为负数
2.在服务器启动时,创建 ,<load-on-startup>
为0或者正数 - servlet的init方法,只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的。多个用户同时访问时可能存在线程安全问题,所以尽量不要在servlet定义成员变量。即使定义了成员变量,也不要修改值。
- 提供服务:执行service方法,执行多次
- 被销毁:执行destroy方法,执行一次。服务器正常关闭时,servlet被销毁。在销毁之前被执行,用于释放资源。
- getServletInfo:获取servlet的一些信息:版本、作者等等
- getServletConfig:获取ServletConfig对象(servlet的配置对象)
4. IDEA、tomcat、servlet相关配置
启动tomcat控制台或命令窗口中文乱码,将tomcat安装目录/conf/logging.properties中的所有UTF-8修改为gbk格式
IDEA会为每一个tomcat部署的项目单独简历一份配置文件
- 查看控制台的log:Using CATALINA_BASE: “C:\Users\97130\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Unnamed_tomcat_2”
工作空间项目 和tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,其存放在整个项目的out\artifacts目录下
tomcat部署的web项目对应着“工作空间项目”的web目录下的所有资源
tomcat断点调试
5.servlet体系结构
- servlet —- 接口
- GenericServlet :将servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象方法。在定义servlet类时,可以直接集成GenericServlet类,实现service方法
1 |
|
- HttpServlet:对HTTP协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet或doPost
1 |
|
- urlpattern:servlet访问路径
- 一个servlet可以定义多个访问路径:@WebServlet({“/demo3”,”/dd3”})
- 路径定义规则
- /xxx
- /xxx/xxx:多层路径,目录结构
- *.后缀名
tomcat项目部署
1.web服务器软件
服务器:安装了服务器软件的计算机
web服务器:接收用户请求,处理请求,做出响应
在web服务器中可以部署web项目,让用户通过浏览器来访问这些项目
web容器:动态资源的运行环境
常见的Java相关的web服务器软件
weblogic:Oracle公司,大型的Javaee服务器,支持所有的javaee规范
websphere:IBM公司
JBOSS:
tomcat:Apache组织、servlet/JSP
2.tomcat
启动:双击bin目录下的startup.bat
- 若出现黑窗口一闪而过是因为没有正确配置JAVA_HOME环境变量
- 启动报错,找到占用的端口号和对应的进程,杀死该进程。
- 在cmd中输入netstat -ano,找到 IP:端口号 如127.0.0.1:8080,以及对应的PID,在任务管理器中将对应的进程关闭
- 修改自身的端口号:在tomcat安装目录中的conf目录下找到sever.xml文件,将其中port进行修改
访问:在浏览器中输入http://127.0.0.1:8080/ 或者http://localhost:8080/
关闭
- 双击bin目录下的shutdown.bat
- 或者按ctrl+c
配置:部署项目的方式
直接将项目放到tomcat安装目录下的webapps目录下。
例如:创建hello文件夹,文件夹下编写一个helloworld.html文件,启动tomcat,在浏览器中输入localhost:8080/hello/helloworld.html,就可以访问这个静态资源文件。
/hello:项目的访问路径—>虚拟目录
将项目工程直接打包成war包,放入webapps目录下,浏览器访问,tomcat会自动解压该包。如果没有的话,就重启一下tomcat
- 例如将上面的helloworld.html压缩成hello.war文件,放到webapps目录下,解压后出现hello目录,下面存放helloword.html
配置conf/sever.xml文件
在
<Host>
标签体中配置,其中docBase代表项目存放的路径,path为虚拟目录1
2<!--部署项目-->
<Context docBase="E:\JAVA\JavaScript\HTML\hello" path="/hxx" />- 例如:上面在hello文件夹中存放了helloworld.html文件,启动tomcat后,在浏览器中输入:localhost:8080/hxx/helloworld.html
热部署方式:在conf\Catalina\localhost目录下创建任意名称的xml文件,在文件中编写
<Context docBase="E:\JAVA\JavaScript\HTML\hello" />
,同样的docBase是项目的位置,虚拟目录是xml文件的名字。
- 例如创建hxx.xml,然后再上面docBase目录下编写一个helloworld.html文件,启动tomcat,再浏览器中输入:localhost:8080/hxx/helloworld.html
3.与IDEA集成,创建部署web项目
静态项目和动态项目
目录结构
Java动态项目的目录结构:
–项目根目录
–WEB-INF目录
–web.xml:web项目的核心配置文件,只有这个文件的是静态项目
–classes:防止字节码文件目录
–lib目录:放置以来的jar包
3.1在IDEA2020 项目中中加入tomcat服务
- 点击项目菜单栏中的Edit/Add Configurations,在Templates中选择Tomcat Sever下的 Local,并在deployment中添加Artifacts
3.2创建javaweb项目
- 创建一个空项目,新建一个java module:test,右键test,选择add framework support,添加web application
web项目目录结构和运行
3.3 热部署
Jsoup解析器
1.快速入门
- 导入jar包:https://jsoup.org/download
- 获取Document对象
- 获取对应的标签Element对象
- 获取数据
1 | public class demo1 { |
2.对象
Jsoup:工具类,可以解析html和xml文档,返回Document
- parse(File in,String charsetName):解析xml或html文件
- parse(String str):解析xml或html字符串
- parse(URL url,int timeoutMillis):通过网络路径获取指定的xml或html文档
Document:文档对象,代表文档中的dom树
getElementById(String id):根据id属性值获取唯一元素对象
getElementsByTag(String tagName):根据元素标签名称获取元素对象集合
getElementsByAttribute(String key):根据元素属性名称获取元素对象集合
getElementsByAttribute(String key,String value):根据属性名和属性值获取元素对象集合
Elements:元素Element对象的集合
- 获取子元素对象
Element:元素对象
- 获取属性值
- String attr(String key)
- 获取文本内容
- String text():获取文本内容
- html():获取标签体的所有内容,包括子标签
- 获取属性值
Node:节点对象
- 是Document和Element的父类
3.查询方式
selector:选择器
- Elements select(String cssQuery)
- Jsoup文档中参考selector类中定义的语法
1
Elements select = document.select("student[number='stu1'] > age");
XPath:
- XML路径语言,确定XML文档中某部分位置的语言
- 导入jar包
- 根据document对象,创建JXDocument对象
- 查询w3cshool参考手册,使用xpath的羽凡完成查询
1 | public class demo3 { |
XML
1. 概述
- 概念:Extensive markup Language,可扩展标记语言
- 可扩展:标签可自定义
- 功能:存储数据,可做配置文件,可在网络中传输
- xml和html的区别
- xml标签自定义,html标签预定义
- xml语法严格
- xml存储数据,html展示数据
2.语法
基础语法
- 文档的后缀名为 .xml
- xml第一行必须定义为文档声明
- xml文档中有且仅有一个根标签
- 属性值必须使用引号引起来
- 标签必须正确关闭
- 标签名称区分大小写
1
2
3
4
5
6
<users>
<user id="user1">
<name>hxx</name>
</user>
</users>组成部分
文档声明
- 格式:
<?xml 属性列表 ?>
- 属性列表
- version:版本号,必须写
- encoding:编码方式。告知解析引擎当前文档使用的字符集,默认ISO-8859-1
- standalone:是否独立。取值yes no,表示是否依赖与其他文件
- 格式:
指令:
<?xml-stylesheet type="text/css" href="../CSS/a/css"?>
标签
- 名称可以包含字母数字和其他的字符
- 名称不能以数字或者标签符号开始
- 名称不能以字母xml、XML等等开始
- 不能包含空格
属性
文本内容
CDATA区:在该区域中的数据会被原样展示
格式:
<![CDATA[文本内容]>
3.约束
规定xml文档的书写规则
分类
DTD
外部DTD:将约束文件定义在外部的dtd文件中
- 引入本地DTD文件:
<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">
- 引入网络中DTD文件:
<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件位置的url">
- 引入本地DTD文件:
内部DTD:
<!DOCTYPE 根标签[内容]>
student.dtd
1
2
3
4
5
6
7
8
9
10<!ELEMENT students (student*) >
<!--*号代表出现0次或多次,+号代表至少出现1次
根标签students,子标签student-->
<!ELEMENT student (name,age,sex) >
<!--#PCDATA代表字符串-->
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT sex (#PCDATA) >
<!--student标签有ID属性,且必须有-->
<!ATTLIST student number ID #REQUIRED>- xml文件
1
2
3
4
5
6
7
8
9
<students>
<student number="stu1">
<name>hxx</name>
<age>22</age>
<sex>女</sex>
</student>
</students>schema:复杂的约束技术,文件后缀名 .xsd
引入约束文件
根元素
引入xsi前缀:xmlns:xsi = “”
引入xsd文件命名空间,xsi:schemaLocattion=””
为每一个xsd约束声明一个前缀,作为标识:xmlns=””
4.解析
- 操作xml文档,将文档中的数据读取到内存中
- 解析方式:
- DOM:将标记语言一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD所有操作
- 缺点:占内存
- SAX:逐行读取,基于事件驱动
- 优点:占内存小
- 缺点:只能读取,不能增删改
- DOM:将标记语言一次性加载进内存,在内存中形成一颗dom树
- 常见解析器
- JAXP:sun公司提供的解析器,支持dom和sax两种思想
- DOM4J
- Jsoup:java的HTML解析器
- PULL:Android操作系统内置的解析器,sax方式
BootStrap
1. BootStrap概念
- 一个前端开发的框架,基于HTML、CSS、JavaScript。
- 定义了很多的CSS样式和js插件
- 响应式布局:Bootstrap 的响应式 CSS 能够自适应于台式机、平板电脑和手机。
2.快速入门
- 下载:https://v3.bootcss.com/getting-started/#download
- 在项目中导入bootstrap文件
- 创建HTML页面,引入资源文件
3.响应式布局
实现:依赖于栅格系统,每一行平均分成12个各自,可以指定元素占几个
步骤
定义容器
容器分类:
- container
- container-fluid:100%宽度
定义行。样式:row
定义元素。样式:col-设备代号-格子数目
超小屏幕 手机 (<768px) 小屏幕 平板 (≥768px) 中等屏幕 桌面显示器 (≥992px) 大屏幕 大桌面显示器 (≥1200px) .col-xs-
.col-sm-
.col-md-
.col-lg-
注意点
- 一行中如果格子数目超过12,则超出部分自动换行、
- 栅格类属性可以向上兼容。栅格类适用与屏幕宽度大于或等于分界点大小的设备
- 如果真实设备宽度小于设备栅格类属性的设备代码的最小值,会一个元素占满一整行
1 |
|
4.css样式和js插件
css样式
- 按钮:class=”btn btn-default”
- 图片:class=”img-responsive” 在任意设备中图片宽度都是100%
- 表格
- 表单
组件
导航条
插件
BOM
1. 概念
- Browser Object Model 浏览器对象模型,将浏览器的各个组成部分封装成对象。
2.组成
Window:窗口对象
创建
方法
与弹出框有关的方法:
alert() 显示带有一段消息和一个确认按钮的警告框。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。- 如果用户点击确定按钮,则方法返回true
- 如果用户点击取消按钮,则方法返回false
prompt() 显示可提示用户输入的对话框。
- 返回值:获取用户输入的值
与打开关闭有关的方法:
close() 关闭浏览器窗口。谁调用我 ,我关谁
open() 打开一个新的浏览器窗口,返回新的Window对象与定时器有关的方式
setTimeout() 在指定的毫秒数后调用函数或计算表达式。* 参数: 1. js代码或者方法对象 2. 毫秒值
- 返回值:唯一标识,用于取消定时器
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval() 取消由 setInterval() 设置的 timeout。
属性:
- 获取其他BOM对象:
history
location
Navigator
Screen: - 获取DOM对象
document
- 获取其他BOM对象:
特点
- Window对象不需要创建可以直接使用 window使用。 window.方法名();
- window引用可以省略。 方法名();
Navigator:浏览器对象
Screen:显示器屏幕对象
History:历史记录对象
创建(获取):
- window.history
- history
方法:
- back() 加载 history 列表中的前一个 URL。
- forward() 加载 history 列表中的下一个 URL。
- go(参数) 加载 history 列表中的某个具体页面。
- 参数:
- 正数:前进几个历史记录
- 负数:后退几个历史记录
- 参数:
属性:
- length 返回当前窗口历史列表中的 URL 数量。
Location:地址栏对象
创建(获取):
window.location
location
方法:
- reload() 重新加载当前文档。刷新
属性
- href 设置或返回完整的 URL。
事件
1. 事件简单学习
- 功能:某些组件被执行了某些操作后,触发某些代码的执行。
- 事件源:组件。如按钮,文本输入框等
- 监听器:代码
- 注册监听:将事件,事件源,监听器结合在一起。当事件源上发生了某个事件则触发执行某个监听器代码。
- 如何绑定事件
- 直接在html标签上,指定事件的属性(操作),属性值就是js代码
- 事件:onclick单击事件
- 通过JS获取元素对象,指定事件属性,设置一个函数
- 直接在html标签上,指定事件的属性(操作),属性值就是js代码
1 | <img src="../img/off.gif" alt="开灯" id="light1" onclick="alert('我被1点了')"> |
2.常见事件
点击事件:
onclick:单击事件
ondblclick:双击事件
焦点事件
onblur:失去焦点
一般用于表单校验
onfocus:元素获得焦点。
1
2
3
4
5
6
7<script>
window.onload = function () {
document.getElementById("username").onblur=function () {
alert("失去焦点");
}
}
</script>
- 加载事件:
- onload:一张页面或一幅图像完成加载。
- 鼠标事件:
- onmousedown 鼠标按钮被按下。
- 定义方法时,定义一个形参,接收event对象
- event对象的button属性可以获取鼠标按钮键被点击
- onmouseup 鼠标按键被松开。
- onmousemove 鼠标被移动。
- onmouseover 鼠标移到某元素之上。
- onmouseout 鼠标从某元素移开。
键盘事件:
onkeydown 某个键盘按键被按下。
- event对象的keyCode属性为接受的键盘的字符,可接受判断是否为回车进行表单提交
onkeyup 某个键盘按键被松开。
onkeypress 某个键盘按键被按下并松开。
选择和改变
onchange 域的内容被改变。
- 下拉列表中应用,比如省市区三级选择
onselect 文本被选中。
表单事件:
onsubmit 确认按钮被点击。
- 可以组织表单提交,方法返回false时阻止提交
1
2
3
4
5
6
7
8
9
10
11
12<form action="#" id="form"onclick="return check()">
<input type="text" id="username"placeholder="请输入用户名">
<input type="submit"value="提交">
</form>
<script>
function check(){
return false;
}
document.getElementById("form").onsubmit = function () {
return false;
}
</script>onreset 重置按钮被点击。