JavaScript 提交表单的方式 (Using JavaScript Submit Form)

来源:互联网 发布:鼠标双击打不开软件 编辑:程序博客网 时间:2024/04/27 16:56

最近做项目遇到用Javascript提交表单的问题, 之前也做过几次, 但是不够全面, 这次总结出了几种用JavaScript提交表单的方式, 并且对此作出了比较, 选出了一种最适合此项目的方式。

 

我目前正在为Sun Communication Suite做一个创建用户的小型系统,大家都知道我们可以通过表单,Ajax 和链接来访问服务器, 最简单的方法就是使用连接, 例如:<a href=UserServlet?event=SEARCH_MAILING_LIST&currentPage=1&keyword="+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="../js/commons.js"></script>
    </head>
    <body>
    <jsp:include page="../inc/admin/headerMail.jsp"/>
    <div id="main">
        <div id="contents" >
            <h2>Add new members to mailing list: <span style="color:blue;"><%=request.getAttribute("cn")%></span></h2>
             <form name="addMailingListMember" id="addMailingListMember" action="UserServlet" method="post">
             <table cellspacing="5" cellpadding="5">
               <%
                  Pager pager =(Pager) request.getAttribute("pager");
                  int currentPage =pager.getCurrentPage();
                  int pageSize = pager.getPageSize();
                  int i=(currentPage-1)*pageSize;
                   LinkedList users = (LinkedList)request.getAttribute("users");
                   if(!users.isEmpty()){
                %>
                     <tr style="font-weight:bold"><td>No.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                     </td><td>UID:</td><td>gCode:</td><td>Givenname:</td><td>Surname:</td><td>Mail:</td><td>Description:</td></tr>
                <%
                      for(Iterator iter = users.iterator();iter.hasNext();){
                       User user = (User) iter.next();
                       i++;
                      // Attributes attrs = user.getAttrs();
                %>
                     <tr><td><%=i%>.&nbsp;&nbsp;<input type="checkbox" name="uid" value="<%=user.getUid()%>"  /></td>
                          <td width="15%"><%=user.getUid()%></td>
                           <td><%=user.getGCode()%></td>
                          <td><%=user.getGivenName()%></td>
                          <td><%=user.getSn()%></td>
                          <td width="30%"><%=user.getMail()%></td>
                          <td><%if(user.getDescription()==null||user.getDescription().length()==0){%>Not Set<%} else %><%=user.getDescription()%></td>
                      </tr>                    
                 <%
                       }
                 %>
                
                    <input type="hidden" name="cn" value="<%=request.getParameter("cn")%>"/>
                    <input type="hidden" name="event" value="ADD_MAILING_LIST_MEMBER" />
                    <tr><td><button onclick="return selectAllCheckBoxs('uid');">Select All</button></td><td><button onclick="return deselectAllCheckBoxs('uid')">Deselect All</button></td><td></td><td><input type="submit" name="submit" value="Add to Mailing List"/></td></tr>
                  </table>
               </form>
               <hr>
                <P STYLE="margin-top:-5px;"><strong>Pages:</strong>
                <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("<a href=UserServlet?event=SEARCH_USER_FOR_MAILING_LIST&currentPage=1&keyword="+keyword+"&searchBy="+searchBy+"&cn="+request.getAttribute("cn")+">First Page</a>&nbsp;&nbsp;");
                        }

                        if(pager.isHasPrevious()){
                             out.println("<a href=# onclick=submitForm('pagination',"+(pager.getCurrentPage()-1)+")>Prev Page</a>&nbsp;&nbsp;");
                        }

                        for(int j=0;j<pages.length;j++){
                            if(pager.getCurrentPage()==pages[j]){
                                out.println("<a href=# onclick=document.pagination.currentPage.value="+pages[j]+";document.pagination.submit();><span style='color: red;'>["+pages[j]+"]</span></a>");
                            }else {
                                 out.println("<a href=# onclick=submitForm('pagination',"+pages[j]+")>["+pages[j]+"]</a>");
                            }

                        }

                        if(pager.isHasNext()){
                             out.println("<a href=# onclick=submitForm('pagination',"+(pager.getCurrentPage()+1)+")>Next Page</a>&nbsp;&nbsp;");
                        }

                        if(pager.isHasLast()){
                            out.println("<a href=# onclick=submitForm('pagination',"+pager.getTotalPage()+")>Last Page</a>&nbsp;&nbsp;");
                        }
                 %>
                 </P>
                 <%
                  } else {
                       //make the mailing list member availabe when user are trying to re-run the search
                       //request.setAttribute("members", members);
                 %>
                      <p>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 <a href="<%=request.getContextPath()%>/admin/mailingListMemberSearch.jsp?cn=<%=request.getParameter("cn")%>">Search Again</a></p>
                 <%     
                  }
                 %>
        </div>
    </div>
    </body>
</html>