Soumettre le formulaire en utilisant un bouton en dehors de la balise

Dites que j'ai:

<form method="get" action="something.php">
    <input type="text" name="name" />
</form>

<input type="submit" />

Comment puis-je soumettre ce formulaire avec ce bouton de soumission en dehors du formulaire, je pense qu'en HTML5 il y a un attribut d'action pour le submit mais je ne suis pas sûr si c'est entièrement cross-browser et si ce n'est pas le cas est là de toute façon pour le faire?

208
demandé sur Mrchief 2011-08-11 07:55:02

11 réponses

Pour autant que je sache, vous ne pouvez pas le faire sans javascript.

Voici ce que dit la spécification

Les éléments utilisés pour créer des contrôles apparaissent généralement dans un formulaire élément, mais peut également apparaître en dehors d'une déclaration D'élément de formulaire quand ils sont utilisés pour construire des interfaces utilisateur. Ceci est discuté dans le section sur les événements intrinsèques. notez que les contrôles en dehors d'un formulaire ne soyez des contrôles réussis.

C'est mon gras

Un Le bouton submit est considéré comme un contrôle.

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

Des commentaires

J'ai une zone de paramètres à onglets multiples avec un bouton pour mettre à jour tout, en raison pour la conception de celui-ci, le bouton serait en dehors du formulaire.

Pourquoi ne pas placer le input dans le formulaire, mais utiliser CSS pour le positionner ailleurs sur la page?

56
répondu Jason Gennaro 2011-08-11 04:09:12

En HTML5, il y a l'attribut de formulaire . Fondamentalement

<form id="myform" method="get" action="something.php">
    <input type="text" name="name" />
</form>

<input type="submit" form="myform" />
463
répondu Lie Ryan 2012-09-24 14:56:58

Une solution qui fonctionne très bien pour moi, manque toujours ici. Cela nécessite d'avoir un élément <submit> ou <input type="submit"> visuellement caché dans le <form>, et un élément <label> associé en dehors de celui-ci. Cela ressemblerait à ceci:

<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>

Maintenant, ce lien vous permet de "cliquer" sur le formulaire <submit> élément en cliquant sur l'élément <label>.

266
répondu Offereins 2017-07-06 13:33:17

Si vous pouvez utiliser jQuery vous pouvez utiliser ce

<form method="get" action="something.php" id="myForm">
    <input type="text" name="name" />

    <input type="submit" style="display:none" />
</form>

<input type="button" value="Submit" id="myButton" />

<script type="text/javascript">
    $(document).ready(function() {
       $("#myButton").click(function() {
           $("#myForm").submit();
       });
    });
</script>

Donc, l'essentiel est de créer un bouton comme Submit, et de mettre le vrai bouton submit dans le formulaire (bien sûr en le cachant), et de soumettre le formulaire par jquery en cliquant sur le bouton 'faux Submit'. Espérons que cela aide.

41
répondu dav 2016-07-15 18:29:42
<form method="get" id="form1" action="something.php">

</form>

<!-- External button-->
<button type="submit" form="form1">Click me!</button>

Cela a fonctionné pour moi, d'avoir un bouton de soumission à distance pour un formulaire.

29
répondu Joe the Squirrel 2015-07-03 20:35:01

, Essayez ceci:

<input type="submit" onclick="document.forms[0].submit();" />

Bien que je suggère d'ajouter un id au formulaire et d'y accéder au lieu de document.forms[index].

14
répondu Mrchief 2011-08-11 04:00:08

Vous pouvez toujours utiliser jQuery:

<form id="myForm">
  <!-- form controls -->
</form>
<input type="submit" id="myButton">

<script>
$(document).ready(function () {
  $("#myButton").click(function () {
    $("#myForm").submit();
  });
});
</script>
10
répondu Aravind Suresh 2016-09-18 07:23:18

Voici une solution assez solide qui intègre les meilleures idées jusqu'à présent ainsi que ma solution à un problème mis en évidence avec Offerein. aucun javascript n'est utilisé.

Si vous vous souciez de la rétrocompatibilité avec IE (et même Edge 13), Vous ne pouvez pas utiliser le form="your-form" attribut .

Utilisez une entrée de soumission standard avec display none et ajoutez une étiquette en dehors du formulaire:

<form id="your-form">
  <input type="submit" id="your-form-submit" style="display: none;">
</form>

Notez l'utilisation de display: none;. Cela est intentionnel. Utilisation de la classe .hidden de bootstrap est en conflit avec .show() et .hide() de jQuery, et a depuis été obsolète dans Bootstrap 4.

Maintenant, ajoutez simplement une étiquette pour votre soumission, (stylée pour bootstrap):

<label for="your-form-submit" role="button" class="btn btn-primary" tabindex="0">
  Submit
</label>

Contrairement à d'autres solutions, j'utilise également tabindex - mis à 0 - ce qui signifie que nous sommes maintenant compatibles avec la tabulation du clavier. L'ajout de l'attribut role="button" lui donne le style CSS cursor: pointer. Et le tour est joué. (Voir ce violon).

8
répondu Jonathan 2016-06-24 18:37:45

Similaire à une autre solution ici, avec une modification mineure:

<form method="METHOD" id="FORMID">
   <!-- ...your inputs -->
</form>
<button type="submit" form="FORMID" value="Submit">Submit</button>

Https://www.w3schools.com/tags/att_form.asp

7
répondu msterpka 2018-06-28 20:46:58

Ce travail parfaitement! ;)

Cela peut être fait en utilisant Ajax et avec j'appelle: "un élément miroir de forme". Au lieu d'envoyer un formulaire avec un élément extérieur, vous pouvez créer un faux formulaire. Le formulaire précédent n'est pas nécessaire.

<!-- 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 serait comme:

    <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>

C'est très utile si vous voulez envoyer des données dans un autre formulaire sans soumettre le formulaire parent.

Peut-être que ce code peut optimiser et corriger plus en fonction du but. Fonctionne parfaitement!! ;) Fonctionne aussi si vous voulez une boîte d'option de sélection comme ceci:

<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>

J'espère aider quelqu'un comme m'a aidé. ;)

2
répondu Franks 2016-07-28 10:46:15

Peut-être que cela pourrait fonctionner, mais je ne sais pas si C'est du HTML valide.

<form method="get" action="something.php">
    <input type="text" name="name" />
    <input id="submitButton" type="submit" class="hide-submit" />
</form>

<label for="submitButton">Submit</label>
1
répondu Emmanuel Lozoya 2016-03-11 22:05:30