最近做项目遇到用Javascript提交表单的问题, 之前也做过几次, 但是不够全面, 这次总结出了几种用JavaScript提交表单的方式, 并且对此作出了比较, 选出了一种最适合此项目的方式。
我目前正在为Sun Communication Suite做一个创建用户的小型系统,大家都知道我们可以通过表单,Ajax 和链接来访问服务器, 最简单的方法就是使用连接, 例如:<a href=UserServlet"+keyword+"&searchBy="+searchBy+"&cn="+request.getAttribute("cn")+">First Page</a>, 把所有需要的数据全部写到超链接上, 如果你能够观察一下就会知道,在上边的链接中只有currentPage是变化的, 其他参数event, keyword, searbyBy和cn是不变的, 那么我就想到如果我能够把这些不变的参数封装到一个表单中, 当用户点击上面的超链接的时候我用JavaScript把这个表单提交, 那么我自然会访问到服务器。
表单:
<form name="pagination" id="pagination" action="UserServlet" method="get"> <input type="hidden" name="currentPage" value="1"/> <Input type="hidden" name="cn" value="<%=request.getAttribute("cn")%>"/> <input type="hidden" name="keyword" value="<%=request.getAttribute("keyword")%>"/> <input type="hidden" name="searchBy" value="<%=request.getAttribute("searchBy")%>"/> <input type="hidden" name="event" value="SEARCH_USER_FOR_MAILING_LIST"> </form>
在提交表单的过程中, 我只需要把参数currentPage传给JavaScript就好了,所以我就把上面的连接改为下边的形式:
<a href=# onclick=document.pagination.currentPage.value="+pages[j]+";document.pagination.submit();><span style='color: red;'>["+pages[j]+"]</span></a>
大家要注意一定要把document.pagination.currentPage.value="+pages[j]+";写在document.pagination.submit();的前边, 这样在用户提交表单之前, 参数currentPage就已经被修改为我们需要的数值。 这样我就完成了用连接来提交表单, 但是我有遇到了一个问题, 我需要试用上面的这段代码在很多页面, 如果我能统一的写一段JavaScript的话,就会方面我以后对整个系统做维护, 所以我几写了一个JavaScript的函数。
function submitForm(id,currentPage){ //var currentPage = document.pagination.currentPage.value; //alert(currentPage); //currentPage=100; //var currentPage = document.pagination.currentPage.value; //alert(currentPage); document.pagination.currentPage.value=currentPage; var form = document.getElementById(id); form.submit(); }
然后我在超连接的onclick事件上条用这个函数:
<a href=# onclick=submitForm('pagination',"+pages[j]+")>["+pages[j]+"]</a>, 大家可以看到整段代码简洁了不少。
所以我总结了一下,用Javascript提交表单大概有两种写法(根据我目前的理解)
1. document.formName.submit();
2. var form = document.getElementById(id);
form.submit();
下次我想和大家分享一下用JNDI实现分页。我把这次的代码附在下边, 大家可以参考一下。
commons.js
function submitForm(id,currentPage){ //var currentPage = document.pagination.currentPage.value; //alert(currentPage); //currentPage=100; //var currentPage = document.pagination.currentPage.value; //alert(currentPage); document.pagination.currentPage.value=currentPage; var form = document.getElementById(id); form.submit(); }
mailingListMemberAdd.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page import="java.util.LinkedList" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page import="my.gov.rmp.webmail.domain.User" %> <%@ page import="my.gov.rmp.webmail.util.Pager" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Add Member to Mailing List:<%=request.getAttribute("cn")%></title> <script type="text/javascript" src="/UploadFiles/2021-04-02/commons.js">
js提交表单
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。