单个 HTML 表单中的多个提交按钮

Several submit buttons in a single HTML form

我开门见山。我希望有两个独立的按钮来执行两个独特的功能。但是,从相同的表单获取数据。我面临的当前问题是 onSubmit() 将始终使用我附加到表单的任何按钮而不是它自己的功能来执行。

checkUser.js: 从输入字段获取用户名并尝试将其与数据库 (Oracle) 匹配

更新 1:

我已经相应地改变了它们。但是,按 Check 仍然会将我转到 StaffRegAuth.jsp 而不是执行 checkUser 然后打开一个新的 window.

<form action="StaffRegAuth.jsp" name="form" method="post">
  ...
  <button onClick="return validStaffReg();">Register</button>
  <button onclick="return checkUser()">Check</button>
  </form>

更新 2:

更新了我的 checkUser.js 因为这似乎是问题所在

StaffReg.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>
  <title>Staff Registration</title>
  <%-- Javascript --%>
    <script type="text/javascript" src="JS/validStaffReg.js"></script>
    <script type="text/javascript" src="JS/preventSpace.js"></script>
    <script type="text/javascript" src="JS/checkUser.js"></script>
</head>

<body>
  <%response.addHeader( "Cache-Control", "no-cache"); response.addHeader( "Pragma", "no-cache"); response.addHeader( "Expires", "0"); %>
    <h1 align="center"> Account Registration: </h1>
    <form action="StaffRegAuth.jsp" name="form" method="post">
      <div align="center">
        <table style="width = 30%">
          <tr>
            <td>User Name:</td>
            <td>
              <input type="text" name="username" onKeyDown="preventSpace(this)">
            </td>
          </tr>
          <tr>
            <td>Password:</td>
            <td>
              <input type="password" name="password" onKeyDown="preventSpace(this)">
            </td>
          </tr>
          <tr>
            <td>User Group:</td>
            <td>
              <select name="userGroup">
                <option value="1">Administrator
                  </optin>
                  <option value="2">Clerk
                    </optin>
                    <option value="3">Operations
                      </optin>
                      <option value="4">Sales
                        </optin>
              </select>
            </td>
          </tr>
          <tr>
            <td>
              <button onClick="return validStaffReg(form)">Register</button>
            </td>
            <td>
              <button onClick="return checkUser(form)">Check</button>
            </td>
          </tr>
        </table>
      </div>
    </form>
</body>

</html>

validStaffReg.js

// JavaScript Document
function validStaffReg(form) {
  if (document.form.password.value == "" && document.form.username.value == "") {
    alert("Please enter a Password and Login ID.");
    document.form.password.focus();
    return false;
  }
  if (document.form.username.value == "") {
    alert("Please enter a Login ID.");
    document.form.username.focus();
    return false;
  }
  if (document.form.password.value == "") {
    alert("Please enter a Password.");
    document.form.password.focus();
    return false;
  }
  return true;
}

checkUser.js

function checkUser(form) {

  if (document.form.username.value != "" || document.form.username.value != null) {
    var myWindow = window.open("checkUser.jsp", "MsgWindow", "width=200, height=100");
    myWindow.document.write("<p>This is 'MsgWindow'. I am 200px wide and 100px tall!</p>");
    document.form.username.focus();
    return false;
  }
  return true;
}

不要使用提交。

即,不要使用 <input type="submit">

相反,制作两个单独的按钮并调用不同的 onclick 函数。请注意,您仍然可以获得表单值。

<button onclick="return reqfunc()">

使用return,现在可以使用函数了。如果您想 return 返回表单而不转到下一页,则只需 JavaScript 代码中的 return false

使用<button onclick='YourFunction()'>Button Text</button>.

我经常使用的技巧之一如下所示。

<form action="submit.jsp">
  <button type="submit" name="submit_form" value="1" class="hiddenSubmit">Submit</button>
  ...
  <button type="submit" name="clear_form" value="1">Clear</button>
  <button type="submit" name="submit_form" value="1">Submit</button>
</form>

通过给按钮不同的名称,您可以让表单执行任何一致的处理,并让服务器管理任何特定于按钮的处理。当然,您也可以将事件处理程序附加到单独的按钮。

为什么它有两个 [name="submit_form"] 按钮?第一个有一个 class,您可以设置样式使其处于活动状态但不可见(例如,position: absolute; top: -1000px; left: -1000px),这样键盘 <Enter> 将触发该按钮而不是另一个 button[name="clear_form"].