【问题标题】:how to submit form on button click如何在按钮单击时提交表单
【发布时间】:2019-01-30 12:38:00
【问题描述】:

我有一个表单,其中我有两个按钮,一个是 save,另一个是 save as draft,所以保存后我将表单提交给其他 servletsave as Draft 点击我想采取行动新的 servlet 类

  • 我正在做<button type="submit" id="saveDraft" formaction="InsertAsDraft"">,但它不起作用

<div class="container" id="divHide">
  <form action="InsertQuantityIndent" method="post" id="indentForm" autocomplete="on">
    <div class="row position-relative">
      <div class="col-lg-4  brder">
        <h5 id="commonHeader">Outlet Name</h5>
        <select class="test" id="outlet" name="outlet">
          <option>All</option>
          <option>ol1</option>
          <option>ol2</option>
        </select>
      </div>

      <div class="col-lg-4">
        <h5 id="commonHeader">Category</h5>
        <select class="test" id="CategoryName" name="categoryCode">
          <option>All</option>
          <option>Cat1</option>
          <option>Cat2</option>
        </select>
      </div>
    </div>
    <hr style="border: 1px solid black">
    <div>
      <button type="submit" id="save" class="commonButton">
    				<i class="fas fa-save"></i> Save
    			</button>
      <button type="submit" id="saveDraft" formaction="InsertAsDraft" class="commonButton">
    				<i class="fas fa-save"></i> Save as draft
    			</button>
    </div>
  </form>
</div>

当我点击保存时,表单被提交到InsertQuantityIndent,但是当我点击save as draft 时,它被提交但没有数据到达后端

就像 servlet 中的 request.getparameter

这是我的 servlet

    String outlet = request.getParameter("outlet");
    String CategoryCode= request.getParameter("categoryCode");
   System.out.println("outlet in new file :"+outlet);

这里什么都不打印,所以我想在按钮单击时提交表单,并通过它的名称将该数据获取到后端

【问题讨论】:

    标签: javascript html servlets forms


    【解决方案1】:

    HTML

    <div class="container" id="divHide">
       <form action="InsertQuantityIndent" method="post" id="indentForm" autocomplete="on">
          <div class="row position-relative">
             <div class="col-lg-4  brder">
                <h5 id="commonHeader">Outlet Name</h5>
                <select class="test" id="outlet" name="outlet">
                   <option>All</option>
                   <option>ol1</option>
                   <option>ol2</option>
                </select>
             </div>
             <div class="col-lg-4">
                <h5 id="commonHeader">Category</h5>
                <select class="test" id="CategoryName" name="categoryCode">
                   <option>All</option>
                   <option>Cat1</option>
                   <option>Cat2</option>
                </select>
             </div>
          </div>
          <hr style="border: 1px solid black">
          <div>
             <button id="save" class="commonButton" data-formAction="servlet">
             <i class="fas fa-save"></i> Save
             </button>
             <button id="saveDraft" data-formAction="InsertAsDraft" class="commonButton">
             <i class="fas fa-save"></i> Save as draft
             </button>
          </div>
       </form>
    </div>
    

    JavaScript

    const formElm = document.getElementById('indentForm');
    
    const saveButton = document.getElementById("save");
    saveButton.addEventListener('click', (e) => {
      e.preventDefault();
      let elm = e.target;
      const formAction = elm.dataset.formaction;
      console.log(formAction);
    
      formElm.action = formAction;
    
      formElm.submit();
    });
    
    const saveDraftButton = document.getElementById("saveDraft");
    saveDraftButton.addEventListener('click', (e) => {
      e.preventDefault();
      let elm = e.target;
      const formAction = elm.dataset.formaction;
      console.log(formAction);
    
      formElm.action = formAction;
    
      formElm.submit();
    });
    

    您可以找到工作示例 stackblitz:

    https://stackblitz.com/edit/js-qmsnzc

    【讨论】:

    • 嘿,我通过request.getParameter 在我的servlet 调用的值会打印数据吗?或者你能解释一下它是如何工作的
    • 实际上,我从未使用过 Java,但上面的代码可以工作
    • 因为我正在使用几乎所有语言的用户 get post 从客户端获取值作为名称
    • POST 方法用于向后端发送数据
    • 我也想在这里做
    【解决方案2】:

    您可以在此处命名按钮并检查按钮的值并进行相应处理。

    <button type="submit" id="save" name="btn_save" class="commonButton">
       <i class="fas fa-save"></i> Save
     </button>
     <button type="submit" id="saveDraft" name="btn_save_draft" class="commonButton">
       <i class="fas fa-save"></i> Save as draft
     </button>
    

    或者您可以将按钮类型更改为按钮并处理点击侦听器。从您的侦听器更改您的表单操作并使用 javascript 提交。

    【讨论】:

    • 为了保存使用这个 InsertQuantityIndent 和草稿使用 InsertAsDraft 使用这个设置动作 document.getElementById("indentForm").setAttribute("action ", "缩进形式");
    • 在第一次点击和第二次按钮上也可以
    • 你有我的问题吗..我的问题是将表单提交到两个不同的路径
    • 先检查一下。保存时它将被发布到 InsertQuantityIndent 并保存草稿到 InsertAsDraft
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多