【问题标题】:Process a Form Submit with Multiple Submit Buttons in Javascript在 Javascript 中使用多个提交按钮处理表单提交
【发布时间】:2014-09-25 13:15:15
【问题描述】:

我有一个带有多个提交按钮的表单,我想捕获其中任何一个被按下的时间,并为每个按钮执行不同的 JS 代码。

<form id="my-form">
    <input type="email" name="email" placeholder="(Your email)" />
    <button type="submit" value="button-one">Go - One</button>
    <button type="submit" value="button-two">Go - Two</button>
    <button type="submit" value="button-three">Go - Three</button>
</form>

看着older answer,我可以在JS中处理所有的提交按钮:

function processForm(e) {
    if (e.preventDefault) e.preventDefault();

    /* do what you want with the form */

    // You must return false to prevent the default form behavior
    return false;
}

var form = document.getElementById('my-form');
if (form.attachEvent) {
    form.attachEvent("submit", processForm);
} else {
    form.addEventListener("submit", processForm);
}

但是我如何区分不同的提交按钮?有没有办法获取value 并从那里执行逻辑?

我不需要三个提交按钮,本质上...我只需要一个表单中的三个不同按钮来执行三个不同的操作。

谢谢!

【问题讨论】:

    标签: javascript jquery html forms


    【解决方案1】:

    您可以将自定义点击处理程序附加到所有按钮,这样您就可以在提交表单之前检查点击了哪个按钮:

    Live Example

    $("#my-form button").click(function(ev){
        ev.preventDefault()// cancel form submission
        if($(this).attr("value")=="button-one"){
            //do button 1 thing
        }
        // $("#my-form").submit(); if you want to submit the form
    });
    

    【讨论】:

    • 这很好用!我可以删除 attachEvent 的东西并且已经有了 jQuery,所以我不妨使用它。谢谢!
    • 希望对你有帮助,Jsfiddle 代码在这里:jsfiddle.net/pragneshkaria/eusyrdmy/2
    【解决方案2】:

    使用这个

    function processForm(e) {
    if (e.preventDefault) e.preventDefault();
    /* do what you want with the form */
    var submit_type = document.getElementById('my-form').getAttribute("value");
    if(submit_type=="button-one"){
    
    }//and so on
    // You must return false to prevent the default form behavior
    return false;
    }
    

    【讨论】:

      【解决方案3】:

      HTML:

      <form id = "form" onSubmit = {handleSubmit}>
      <input type="email" name="email" placeholder="(Your email)" />
      <button type="submit" value="button-one">Go - One</button>
      <button type="submit" value="button-two">Go - Two</button>
      <button type="submit" value="button-three">Go - Three</button>
      </form>
      

      JS:

      const handleSubmit = e => {
          e.preventDefault();
      
          var ans = document.activeElement['value'];
          console.log(ans);
      };
      

      【讨论】:

      • 之前不知道activeElement。这对我有帮助,因为我有多个动态表单,并且表单中的所有输入字段都是动态的。此外,我有两个提交类型的按钮。我使用 jquery 的 serializedArray() 来获取表单的所有值,使用 $("form").submit 并使用 $(this) 读取。 activeElement 帮助我获得了点击的提交按钮的类型。谢谢。
      【解决方案4】:

      但是如何区分不同的提交按钮?有没有办法从那里获取价值并执行逻辑?

      是的,您可以使用querySelector 来抓取具有属性的元素。

      document.querySelector('#my-form button[value="button-one"]' )
      

      【讨论】:

      • 这允许您定位单个按钮,但不使用基于哪个按钮提交表单的逻辑。
      【解决方案5】:

      您还可以使用SubmitEvent 的只读submitter property。

      HTML(和你一样):

      <form id="my-form">
          <input type="email" name="email" placeholder="(Your email)" />
          <button type="submit" value="button-one">Go - One</button>
          <button type="submit" value="button-two">Go - Two</button>
          <button type="submit" value="button-three">Go - Three</button>
      </form>
      

      JS:

      let form = document.getElementById("my-form");
      form.addEventListener("submit", handleSubmit);
      
      function handleSubmit(event) {
          event.preventDefault()
          alert(event.submitter.value) // shows a different value depending on button pressed
      

      从那里开始,很容易将submitter 用作控制流,例如:

      let form = document.getElementById("my-form");
      form.addEventListener("submit", handleSubmit);
      
      function handleSubmit(event) {
          event.preventDefault()
          submitter = event.submitter.value
          switch (submitter) {
              case "button-one":
                  alert(1)
                  break;
              case "button-two":
                  alert(2)
                  break;
              case "button-three":
                  alert(3)
                  break;
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2021-08-11
        • 2017-05-03
        • 2016-04-06
        • 2013-04-09
        • 2013-02-13
        相关资源
        最近更新 更多