JSP总结(详细,遇到的问题,解决方案)
文章目录初始JSPJSP数据交互JSP中内置对象数据传输初始JSP静态内容:html标签 和 样式表 js小 脚 本:<%%>表 达 式:<%=srt%>向页面输出内容指令:<%@ page %>标准动作:<jsp:include/>声明:在jsp页面中声明一个方法<%!%>注释:// /**/ <!-- HTML注释-->注
·
文章目录
1. 初始JSP
静态内容: html标签 和 样式表 js
小 脚 本: <%%>
表 达 式: <%=srt%> 向页面输出内容
指 令: <%@ page %>
标准动作: <jsp:include/>
声 明: 在jsp页面中声明一个方法<%!%>
注 释: // /**/ <!-- HTML注释-->
注释之间的区别
html 页面中的注释,在F12中是可以看到的
java 代码中的注释 在F12中看不到
2. JSP数据交互
//获取工程根目录
String path = request.getContextPath();
//设置读取请求信息的字符编码为UTF-8
request.setCharacterEncoding("UTF-8");
//通过表单的name属性,获取对应的值,也可以获取url中的?后面的值
String name = request.getParamter("name");
//通过表单的name属性,获取对应的一组值(复选框,下拉列表等)
String[] name = request.getParamterValues("names");
post: 方式提交过来的表单,必须在接受页面中通过setCharacterEncoding("UTF-8")进行转码
get: 方式提交过来的表单,不需要进行进行转码,需在配置文件中进行配置
//查询字符串应用
<a href="color.jsp?color=赤色&id=1">赤色</a>
//防止浏览器从缓存中取数据 ?_=<%=new Date().getTime() %>
<link rel="stylesheet" href="css/index.css?_=<%=new Date().getTime() %>">
3. JSP中内置对象
jsp的内置对象
1.request ------ 一次请求
2.response ------ 一次响应
3.out ------- 输出,向页面输出
4.session ------- 一次会话(多次请求)
(1) session.setMaxInactiveInterval(1000) --设定session的会话时长
(2) 当浏览器关闭的时候,保存在session中的值,也会被摧毁
(3) 通过removeAttribute去摧毁保存在session中的值
//target跳转方式
target='parent'; 在浏览器跳转至父级, (URL)
target='路径'; 在框架内跳转指定路径 (框架本身)
4. 数据传输
//回显方式
//下拉菜单回显方式:
$("[name=roleId] [value="+$("[name=hideRoleId]").val()+"]").attr("selected",true);
$("[name=roleId]").val($("[name=hideRoleId]").val());
//文本框回显方式:
< input type="text" value="<%=userName==null?"":userName%>" name="userName">
<两种处理方式:
方式一: 隐藏域,作用存储查询出来的信息,然后通过DOM操作,获取隐藏域内容,赋值给下拉列表
方式二: 自定义属性data, 作用存储查询出来的信息,然后通过DOM操作,获取属性中的值,赋值给下拉列表>
//提交一个复选框 如果未勾选接收过来的是null
stu.setMarry(request.getParameter("marry")==null?false:true);
//多个复选框赋值
var hobby = $("[name=hideHobby]").val().split(";");
$("[name=hobby]").val(hobby); <隐士迭代>
//批量删除
//关于复选框,method只会提交已经选择的复选框; 必须用表单提交
<input type="checkbox" value="<%=i.getId()%>" name="boxs"> //设置值
<%String[] boxs = request.getParameterValues("boxs");%> //获取值
<!--使用自定义属性赋值 用于select下拉框-->
$("[name=stuGrade]").val($("[name=stuGrade]").attr("data"));
5. 提交表单事件
//提交表单事件
$("form").submit(function(){})
//自动触发事件
$("表单名").trigger("submit");
6. 分页查询
<%
int pageNo = 1; //页码
int pageSize = 3; //显示条数
int totalCount = dao.getCount(); //总条数
int totalPage = (totalCount-1)/pageSize+1; //总页数
String pageStr = request.getParameter("page"); //获取url中?page的值
//判断并复制
if(pageStr!=null && !pageStr.equals("")){
pageNo=Integer.parseInt(pageStr);
}
int prevPage = pageNo==1?1:pageNo-1; //上一个
int nextPage = pageNo==totalPage?totalPage:pageNo+1; //下一个
%>
全查、条件查询、条件查询高亮显示(a标签)、查看详情、分页查询。添加、修改、删除、批量删除。
新闻发布系统(session会话控制、过滤器、后台搭建、新闻主页)
7. Servlet
<%
@WebServlet("/doBatchDelete.shtml")
public class doBatchDelete extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//地址栏
/**
* 实现servlet
* 1. 创建普通Java类
* 2. 实现servlet的规范, 继承HttpServlet类
* 3. 重写service的方法, 用来处理请求
* 4. 设置注解, 指定访问路径
*/
@WebServlet("/Servlet01")
@WebServlet(name="Servlet01",value="/ser01")
@WebServlet(name="Servlet01",value={"/ser01","/ser02"})
@WebServlet(name="Servlet01",urlPatterns="/ser01")
@WebServlet(name="Servlet01",urlPatterns={"/ser01","/ser02"})
//编码格式
request.setCharacterEncoding("UTF-8"); // 请求
response.setCharacterEncoding("UTF-8"); // 响应
response.setHeader("content-type","text/html"); // html
//转发和重定向的应用
转发:一般用于查询操作 如(首页查询,更新查询等) 就是把数据读出来然后在进行赋值,代表两次请求;
requrset.getRequestDispatcher("/index.jsp").forward(request,respones); //转发不用加path
重定向:一般用于增删改 如(增加,删除,修改等); 把数据读出来执行SQL;
response.sendRedirect(path+"/indexServlet.shtml"); //重定向一般加上path
//HttpRequest常用方法
// 获取客户端请求的完整URL (从http开始,到?前面结束)
String url = request.getRequestURL().toString();
System.out.println("获取客户端请求的完整URL:" + url);
// 获取客户端请求的部分URL (从站点名开始,到?前面结束)
String uri = request.getRequestURI();
System.out.println("获取客户端请求的部分URL:" + uri);
// 获取请求行中的参数部分
String queryString = request.getQueryString();
System.out.println("获取请求行中的参数部分:" + queryString);
// 获取客户端的请求方式
String method = request.getMethod();
System.out.println("获取客户端的请求方式:" + method);
// 获取HTTP版本号
String protocol = request.getProtocol();
System.out.println("获取HTTP版本号:" + protocol);
// 获取webapp名字 (站点名)
String webapp = request.getContextPath();
System.out.println("获取webapp名字:" + webapp);
// 获取指定名称的参数,返回字符串
String uname = request.getParameter("uname");
System.out.println("uname的参数值:" + uname);
// 获取指定名称参数的所有参数值,返回数组
String[] hobbys = request.getParameterValues("hobby");
System.out.println("获取指定名称参数的所有参数值:" + Arrays.toString(hobbys));
//request作用域
通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效
// 设置域对象内容
request.setAttribute(String name, String value);
// 获取域对象内容
request.getAttribute(String name);
// 删除域对象内容
request.removeAttribute(String name);
%>
8. Include包含
include静态包含
格式: <%@ include file='要包含的页面地址' %>
特点:
1.将内容进行了直接的替换
2.静态包含只会生成一个源码文件,最终的内容全部在_jspService方法中(源码文件中)
3.不能出现同名变量
4.运行效率高一点点。耦合性较高,不够灵活
<%@ include file="1-header.jsp"%>
<h2>主题内容</h2>
<%@ include file="1-footer.jsp" %>
include动态包含
格式: <jsp:include page=“要包含的页面路径”></jsp:include>
特点;
1.动态包含相当于方法的调用
2.动态包含会生成多个源码文件
3.可以定义同名变量
4.效率高,耦合度低
注:当动态包含不需要传递参数时,include双标签之间不要有任何内容, 包含换行和空格
使用动态包含传递参数
<jsp:include page="要包含的页面路径">
<jsp:param name="参数名" value="参数值" />
</jsp:include>
注: name属性不支持表达式,value属性支持表达式
获取参数: request.getParameter(name);
<jsp:include page="1-header.jsp"></jsp:include>
<h2>主题内容</h2>
<jsp:include page="1-footer.jsp"></jsp:include>
<%-- 动态包含传递参数 --%>
<%
String str = "hello";
String url = "1-footer.jsp";
%>
<jsp:include page="<%=url%>">
<jsp:param name="uName" value="admin" />
<jsp:param name="msg" value="<%=str%>" />
</jsp:include>
9. EL表达式
<%
EL表达式
作用:简化JSP代码
格式:${域对象的名称}
操作对象: EL表达式一般操作的是域对象中的值,不能操作局部变量
操作范围:
page范围: 在当前页面
request范围:在一次请求
session范围:在一次会话
application范围:在整个应用程序
注:
1.如果EL表达式获取域对象的值为空,默认显示空字符串
2.EL表达式默认从小到大范围去找,找到即可,如果四个范围都未找到,则显示空字符串
查找数据时可以使用四个域对象对应的空间对象,分别是:
pageScope,requestScope,sessionScope,applicationScope
%>
<%
//存储
pageContext.setAttribute("name","1");
request.setAttribute("name","2");
session.setAttribute("name","3");
application.setAttribute("name","4");
%>
//取值
获取局部变量的值: ${str}
获取域对象:${name}
获取指定范围的域对象
page范围:${pageScope.name}
request范围:${requestScope.name}
session范围:${sessionScope.name}
application范围:${applicationScope.name}
<%--
EL表达式的使用
获取list
获取list的长度 ${list.size()}
获取list指定下标值 ${list[下标]}
注:list表示的时限域变量名
获取map
获取map中指定key的value
${map.key}
${map["key"]}
注:map代表的是限域变量名
获取JavaBean
获取JavaBean中的属性
${javaBean.属性名}
${javaBean.get属性名()}}
注:JavaBean中属性字段必须提供get方法
empty判断域对象是否为空
为空: true;
否则: false;
--%>
<%
//List
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//存储到域对象中
request.setAttribute("list",list);
//map集合
Map map = new HashMap();
map.put("aaa",1111);
map.put("bbb",2222);
map.put("ccc",3333);
request.setAttribute("map",map);
//JavaBean对象
User user = new User();
user.setUserId(1);
user.setuName("admin");
user.setuPwd("admin");
request.setAttribute("user",user);
%>
<h4>获取list</h4>
获取list的size:${list.size()} <br/>
获取list的指定下标的值: ${list[1]}<br/>
<h4>获取Map</h4>
获取Map指定key的value值: ${map.aaa}----${map["bbb"]}
<h4>获取JavaBean</h4>
获取JavaBean对象:${user}<br>
获取JavaBean中的属性:${user.uName} ----- ${user.getuName()}
//传递参数
<a href="5-EL表达式(课堂).jsp?hobby=篮球">一个参数</a>
<a href="5-EL表达式(课堂).jsp?name=sun&name=zi&name=yuan">一组参数</a>
<接受一个参数>
${param.hobby}<br/>
<接受一组参数>
<c:forEach items="${paramValues.name}" var="i">
${i}<br/>
</c:forEach>
请求转发(request.getRequsetDispatcher().forward()) | 重定向(request.sendRedirect()) |
---|---|
一次请求,数据在request域中共享 | 两次请求,request域中数据不共享 |
服务器端行为 | 客户端行为 |
地址栏不会发生变化 | 地址栏发生改变 |
绝对地址定位到站点后 | 绝对地址可写到http:// |
10. JSTL标签
<引用标签库>
<%--通过taglib标签引入所需要的标签库 --%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix-"c" %>
<JSTL的使用>
1. 下载JSTL所需要的jar包 (standard.jar 和 jstl.jar)
2. 在项目的web目录下的WEB-INF中新建lib目录.将jar拷贝进来
3. 选择"file". 再选择"project Structure"
4. 选择"Modules". 选择右侧的"Dependencies",选择右侧的"+"号,将对应的lib目录加载进来
5. 在需要使用标签库的JSP页面通过taglib标签引入指定库
<if标签库>
if 标签
格式:
<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
常用属性:
test: 条件判断, 操作的是域对象, 接收返回结果是boolean类型的值 (必要属性)
var: 限域变量名(存放在作用域中的变量名), 用来接收判断结果的值 (可选属性)
scope: 限域变量名的范围(page、request、session、application) (可选属性)
注:
1.标签操作的一般都是域对象
2.if标签没有else,如果想要else的效果,就需要设置两个相反的条件
<%
//设置数据
request.setAttribute("num",0);
%>
<c:if test="${num>0}">
数值大于0
</c:if>
<c:if test="${num<0}">
数值小于0
</c:if>
<c:if test="${num>100}" var="flag" scope="request"></c:if>
//获取值
${flag} ---- ${requestScope.flag}
<if-else>
<!--2、条件标签 if-->
<c:set value="admin" var="name"></c:set>
<c:if test="${name =='admin'}" var="isok">
欢迎 <span>${name}</span> 登录
</c:if>
<c:if test="${not isok}">
请登录
</c:if>
choose 选择
when 场合
otherwise 否则
<choose标签>
//语法
choose、when 和 otherwise 标签
<c:choose>
<c:when test="<boolean>">
..
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
属性:
1.choose 标签没有属性
2.when 标签只有一个test属性,必须有属性
3.otherwise 标签没有属性
注意:
1.choose标签和otherwise标签没有属性,而when标签必须有一个test属性
2.choose标签中必须包含至少一个when标签,可以没有otherwise标签(Illegal "choose" without child "when" tag)
3.otherwise标签必须设置在最后一个when标签之后(Illegal "c:when" after "c:otherwise" tag in "c:choose" tag.)
4.choose标签中只能设置when标签与otherwise标签(Illegal child tag in "c:choose" tag: "c:if" tag)
5.when标签和otherwise标签中可以嵌套其他标签
6.otherwise标签会在所有的when标签不执行时才会执行
<%
request.setAttribute("score",90);
%>
<c:choose>
<c:when test="${score<60}">
<h2>你个小渣渣</h2>
</c:when>
<c:when test="${score==60}">
<h2>分不在高,及格就行!</h2>
<c:if test="${1==1}"></c:if>
</c:when>
<c:when test="${scroe>60 && score<80}">
<h2>哎呦不错哦!</h2>
</c:when>
<c:otherwise>
<h2>你很棒哦!</h2>
<c:if test="${1==1}">11</c:if>
</c:otherwise>
</c:choose>
<forEach循环>
forEach标签:
格式:
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var= "<String>"
varStatus = "<String>"
></c:forEach>
属性:
begin: 开始数
end: 结束数
step: 间隔数
var: 限于变量名,用来接收当前遍历的成员
items: 要循环的数据<数组,List,Map等>
1.迭代主体内容多次
<c:forEach begin="开始数" end="结束数" step="间隔数" var="限域变量名"></c:forEach>
相当于Java中的for....int
for(int i=0;i<10;i++){}
2.循环
<c:forEach items="要被循环的数据" var="限域变量名"></c:forEach>
相当于java中的foreach
foreach(String str:list){}
<!-- 迭代主体内容多次 -->
<c:forEach var="i" begin="1" end="10" step="1">
${i}
</c:forEach>
<!-- 迭代详细内容 -->
<c:forEach items="${list}" var="item" varStatus="itemp">
元素内容: ${item}
元素下标: ${itemp.index}
第几个元素: ${itemp.count}
是否时首次: ${itemp.first}
是否时尾次: ${itemp.last}
</c:forEach>
<!-- 循环List集合 -->
<c:forEach items="${list}" var="i">
${i}
</c:forEach>
<!-- 循环Map -->
<C:forEach items="${map}" var="i">
${i.key} ${i.value}<br/>
</C:forEach>
<!-- 循环对象集合 -->
<c:if test="${!empty list}">
<c:forEach items="${list}" var="i">
${i.id}
</c:forEach>
</c:if>
11. ajax的简单应用
//方式一: 原始javascript操作ajax
function checkName(result){
//步骤一: 创建ajax的核心对象XMLHttpRequest
var xhr = new XMLHttpRequest();
//步骤二: 调用open方法 true表示使用的是异步请求
var url = "checkNames.shtml?name="+result;
xhr.open("get",url,true); //true--表示异步 false--表示同步
//步骤三: 设置回调函数:请求响应成功后,做下一步处理
xhr.onreadystatechange = function(){
//进行状态信息的判断
var state = xhr.readyState;
//如果state==4,表示成功
if(state==4){
if(xhr.status==200){
//接收返回来的数据
var data = xhr.responseText;
if(data=="false"){
document.getElementById("spans").innerHTML="用户名已存在";
document.getElementById("spans").style.color="red";
}else{
document.getElementById("spans").innerHTML="用户名可用";
document.getElementById("spans").style.color="green";
}
}
}
}
//第四步
xhr.send(null);
}
//方式二: 使用JQuery封装ajax,实现异步请求验证用户名的功能
$(function(){
//设置失去焦点事件
$("[name=userName]").blur(function(){
var uName = $(this).val();
$.ajax({
url:"checkNames.shtml",
type:"post",
data:{"name",uName},
success:function(result){
//result -- 就是查询回来的数据
if(result=="true"){
$("#spans").html("用户名已存在").css("color","red");
$(".btn-submit").attr("disabled",false);
}else{
$("#spans").html("用户名可用").css("color","green");
$(".btn-submit").attr("disabled",true);
}
}
})
})
})
//方式三: 使用post
//优点: 发送方式默认为post,结构简单, 清晰, 容易上手
//缺点: 只能处理成功的情况
$("[name=userName]").blur(function(){
var uName=$(this).val();
$.post("checkNames.shtml",{"name":uName},function(result){
if(result=="true"){
$("#spans").attr("class","glyphicon glyphicon-ok").css("color","green");
$(".btn-submit").attr("disabled",false);
}else{
$("#spans").attr("class","glyphicon glyphicon-remove").css("color","red");
$(".btn-submit").attr("disabled",true);
}
})
})
//方式四: 使用get
$.get("checkNames.shtml?name="+uName+"",function(result){
if(result=="true"){
$("#spans").attr("class","glyphicon glyphicon-ok").css("color","green");
$(".btn-submit").attr("disabled",false);
}else{
$("#spans").attr("class","glyphicon glyphicon-remove").css("color","red");
$(".btn-submit").attr("disabled",true);
}
});
//获取值
String name = request.getParameter("name");
//调用数据访问层对象
UserInfoDao uiDao = new UserInfoDaoImpl();
UserInfo userInfo = uiDao.checkUser(name);
//3.为了不让页面整体刷新,不能采用重定向和请求转发
//只是讲得到的数据返回给JQuery实现ajax的调用处的位置即可
if(userInfo!=null){
response.getWriter().print(false);
}else{
response.getWriter().print(true);
}
参数 | 类型 | 说明 |
---|---|---|
url | String | 发送请求的地址,默认为当前页地址 |
type | String | 请求方式,默认为GET |
data | String或Array | 发送到服务器的数据,参数 |
success | 任意类型 | 请求成功后调用的函数;参数result:可选,由服务器返回的数据 |
dataType | String | 预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text |
12. ajax的应用
//json格式存取值
//定义一个对象数组
var phone=[{
brand:"华为",
color:"紫色",
price:4000
},{
brand:"小米",
color:"蓝色",
price:"5000"
},{
brand:"苹果",
color:"白色",
price:"9000"
}];
//Jqery
$(phone).each(function(i,e){
console.log();
//创建标签并添加进去
$(".uls").append($("<li></li>").html(e.brand+"----"+e.color+"----"+e.price));
})
//html
<ul class="uls"></ul>
//使用fastjson方式
导入包: import com.alibaba.fastjson.JSON;
//1.查询数据
MessageDao mDao = new MessageDaoImpl();
List<Message> mlist = mDao.getAllMessage();
//2.为了不让页面整体刷新,不能采用重定向和请求转发,只是讲得到的数据返回给JQuery实现ajax的调用处的位置即可
//获取的信息不能直接返回,需要讲对象转换为JSON格式的字符串
response.getWriter().print(JSON.toJSONString(mlist));
//异步读取 发送ajax 去查询所有的数据
$.ajax({
url:"jsonServlet.shtml",
type:"post",
success:function(result){
$("#yibu").empty(); //清空数据
//将result-json格式的字符串转换回到原来的格式
result=eval("("+result+")");
//创建一个select下拉框列表
var select = $("<select></select>");
//循环result
$(result).each(function(i,e){
//每次循环创建一个li
$("#yibu").append($("<li></li>").html(e.title+"---"+e.sendDate));
})
}
});
//从元素转换JSON格式
JSON.toJSONString(元素);
//从JSON格式转换成元素格式
result=eval(result);
//设置格式 通过注解给属性设置日期格式
@JSONField(format = "yyyy-MM-dd HH-mm-ss");
格式 | 说明 |
---|---|
JSON.toJSONString(元素) | 把元素转换成字符串 |
result=eval(result) | 转换回原来的格式 |
@JSONField(format = “yyyy-MM-dd HH-mm-ss”) | 在实体类属性上加上注解,表示日期类型 |
@JSONField(serialize = false) | 数据不读取 |
13. 过滤器
<%
/**
* 过滤器
* 1. @WebFilter("/s01") 配置拦截的资源路径
* 2. doFilter() 方法中需要设置放行,否则无法到达资源
(filterChain.doFilter(servletRequest,servletResponse););
* 3. 如果是过滤器链,则先配置的先执行(首字母在前的先执行),响应时顺序反过来
*/
//拦截 继承过滤器 servlet下的Filter
@WebFilter("/s01") //资源拦截路径
public class Filter01 implements Filter {
//初始
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter01 init...");
}
//执行
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//doFilter() 放行方法后去做响应拦截的
System.out.println("Filter01 正在拦截...");
//放行资源
filterChain.doFilter(servletRequest,servletResponse);
//doFilter() 放行方法前去做请求拦截的
System.out.println("Filter02 正在响应...");
}
//销毁
@Override
public void destroy() {
System.out.println("Filter01 destroy...");
}
}
%>
14. 文件上传
<form action="index.jsp" method="post" enctype="multipart/form-data">
</form>
<%
@MultipartConfig //如果是文件上传,必须要设置该注解!!!
@WebServlet("/updateServlet") //访问注解
public class uploadServlets extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理请求编码格式
request.setCharacterEncoding("UTF-8");
//获取普通文本框(通过getParameter(name)方法获取)
String uName = request.getParameter("uName");
System.out.println("用户名:"+name);
//得到Part对象
Part part = request.getPart("myFile");
//得到上传文件的文件名
String fileName = part.getSubmittedFileName();
System.out.println("文件名称:"+fileName);
//设置上传文件的文件要存放的路径
String upload = request.getServletContext().getRealPath("/upload/");
System.out.println("路径:"+upload);
//上传文件
part.write(upload+fileName);
//调用数据访问层对象
Student stu = new Student();
stu.setStudentNo(Integer.parseInt(id));
stu.setPhotos("upload/"+fileName);
StudentDao stuDao = new StudentDaoImpl();
stuDao.updateStudent(stu);
//重定向
response.sendRedirect(path+"/indexServlet.shtml");
//上传多个文件
//获取路径
String realPath = request.getServletContext().getRealPath("/upload/");
//创建Part对象
StringBuffer sb = new StringBuffer();
Collection<Part> parts = request.getParts();
for (Part part : parts) {
String fileName = part.getSubmittedFileName();
if(fileName!=null){
part.write(realPath+fileName);
sb.append("upload/"+fileName+";");
System.out.println("上传成功!");
}
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
%>
15. 清除表单和模态框
//清除模态框,表单
$("#form-add-box")[0].reset();
16. serialize() 方法 获取表单中所有信息
<!--
1. serialize() 方法通过序列化表单值创建 URL 编码文本字符串。
2. 您可以选择一个或多个表单元素(如输入和/或文本区),或表单元素本身。
3. 序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中。
-->
$("button").click(function(){
$("div").text($("form").serialize());
});
更多推荐
已为社区贡献1条内容
所有评论(0)