最近做專案遇到用Javascript提交表單的問題, 之前也做過幾次, 但是不夠全面, 這次總結出了幾種用JavaScript提交表單的方式, 並且對此作出了比較, 選出了一種最適合此項目的方式。
我目前正在為Sun Communication Suite做一個創建用戶的小型系統,大家都知道我們可以透過表單,Ajax 和連結來存取伺服器, 最簡單的方法就是使用連接, 例如:First Page, 把所有需要的資料寫到超連結上, 如果你能夠觀察一下就會知道,在上邊的連結中只有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事件上條用這個函數:
["+pages[j]+"], 大家可以看到整段程式碼簡潔了不少。
所以我總結了一下,用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"%>
<%@ 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" %>
Add Member to Mailing List:<%=request.getAttribute("cn")%>
Add new members to mailing list: <%=request.getAttribute("cn")%>
Pages:
<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>
<%
int[] pages = pager.getPages();
String keyword = request.getAttribute("keyword").toString();
String searchBy = request.getAttribute("searchBy").toString();
if(pager.isHasFirst()){
out.println("First Page ");
}
if(pager.isHasPrevious()){
out.println("Prev Page ");
}
for(int j=0;j["+pages[j]+"]");
}else {
out.println("["+pages[j]+"]");
}
}
if(pager.isHasNext()){
out.println("Next Page ");
}
if(pager.isHasLast()){
out.println("Last Page ");
}
%>
<%
} else {
//make the mailing list member availabe when user are trying to re-run the search
//request.setAttribute("members", members);
%>
No results are matched your keyword or the user that you are looking for is already a member of this mailing list, please specify another keywork and ">Search Again
<%
}
%>
登入後複製