Submit form using a button outside the <form> tag

前端 未结 13 1224
南旧
南旧 2020-11-22 09:45

Say I have:

相关标签:
13条回答
  • 2020-11-22 10:04

    You can always use jQuery:

    <form id="myForm">
      <!-- form controls -->
    </form>
    <input type="submit" id="myButton">
    
    <script>
    $(document).ready(function () {
      $("#myButton").click(function () {
        $("#myForm").submit();
      });
    });
    </script>
    
    0 讨论(0)
  • 2020-11-22 10:04

    I used this way, and kind liked it , it validates the form before submit also is compatible with safari/google. no jquery n.n.

            <module-body>
                <form id="testform" method="post">
                    <label>Input Title</label>
                    <input name="named1" placeholder="Placeholder"  title="Please enter only alphanumeric characters." required="required" pattern="[A-Za-z0-9]{1,20}" />
                    <alert>No Alerts!</alert>
    
                    <label>Input Title</label>
                    <input placeholder="Placeholder" title="Please enter only alphanumeric characters." required="required" pattern="[A-Za-z0-9]{1,20}" />
                    <alert>No Alerts!</alert>
    
                    <label>Input Title</label>
                    <input placeholder="Placeholder" title="Please enter only alphanumeric characters." required="required" pattern="[A-Za-z0-9]{1,20}" />
                    <alert>No Alerts!</alert>
                </form>
            </module-body>
            <module-footer>
                <input type="button" onclick='if (document.querySelector("#testform").reportValidity()) { document.querySelector("#testform").submit(); }' value="Submit">
                <input type="button" value="Reset">
            </module-footer>
    
    0 讨论(0)
  • 2020-11-22 10:05

    A solution that works great for me, is still missing here. It requires having a visually hidden <submit> or <input type="submit"> element whithin the <form>, and an associated <label> element outside of it. It would look like this:

    <form method="get" action="something.php">
         <input type="text" name="name" />
         <input type="submit" id="submit-form" class="hidden" />
    </form>
    
    <label for="submit-form" tabindex="0">Submit</label>
    

    Now this link enables you to 'click' the form <submit> element by clicking the <label> element.

    0 讨论(0)
  • 2020-11-22 10:08

    Update: In modern browsers you can use the form attribute to do this.


    As far as I know, you cannot do this without javascript.

    Here's what the spec says

    The elements used to create controls generally appear inside a FORM element, but may also appear outside of a FORM element declaration when they are used to build user interfaces. This is discussed in the section on intrinsic events. Note that controls outside a form cannot be successful controls.

    That's my bold

    A submit button is considered a control.

    http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1

    From the comments

    I have a multi tabbed settings area with a button to update all, due to the design of it the button would be outside of the form.

    Why not place the input inside the form, but use CSS to position it elsewhere on the page?

    0 讨论(0)
  • 2020-11-22 10:10

    This work perfectly! ;)

    This can be done using Ajax and with what I call: "a form mirror element". Instead to send a form with an element outside, you can create a fake form. The previous form is not needed.

    <!-- This will do the trick -->
    <div >
        <input id="mirror_element" type="text" name="your_input_name">
        <input type="button" value="Send Form">
    </div>
    

    Code ajax would be like:

        <script>
            ajax_form_mirror("#mirror_element", "your_file.php", "#your_element_response", "POST");
    
            function ajax_form_mirror(form, file, element, method) {
                $(document).ready(function() {
                    // Ajax
                    $(form).change(function() { // catch the forms submit event
                        $.ajax({                // create an AJAX call...
                            data: $(this).serialize(),      // get the form data
                            type: method,                   // GET or POST
                            url: file,                      // the file to call
                            success: function (response) {   // on success..
                            $(element).html(response);  // update the DIV
                            }
                        });
    
                        return false; // cancel original event to prevent form submitting
                    });
                });
            }
       </script>
    

    This is very usefull if you want to send some data inside another form without submit the parent form.

    This code probably can be adapted/optimized according to the need. It works perfectly!! ;) Also works if you want a select option box like this:

    <div>
        <select id="mirror_element" name="your_input_name">
            <option id="1" value="1">A</option>
            <option id="2" value="2">B</option>
            <option id="3" value="3">C</option>
            <option id="4" value="4">D</option>
        </select>
    </div>
    

    I hope it helped someone like it helped me. ;)

    0 讨论(0)
  • 2020-11-22 10:11
    <form method="get" id="form1" action="something.php">
    
    </form>
    
    <!-- External button-->
    <button type="submit" form="form1">Click me!</button>
    

    This worked for me, to have a remote submit button for a form.

    0 讨论(0)
提交回复
热议问题