Dis que j'ai:
<form method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" />
Comment puis-je envoyer ce formulaire avec ce bouton de soumission en dehors du formulaire, je pense qu'en HTML5, il y a un attribut d'action pour la soumission, mais je ne sais pas si c'est entièrement cross-browser et s'il ne l'est pas, est-il de toute façon faire ça?
Réponses:
Mise à jour: dans les navigateurs modernes, vous pouvez utiliser l'
form
attribut pour ce faire .Pour autant que je sache, vous ne pouvez pas le faire sans javascript.
Voici ce que dit la spécification
C'est mon audacieux
Un
submit
bouton est considéré comme un contrôle.http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1
D'après les commentaires
Pourquoi ne pas placer l'
input
intérieur du formulaire, mais utiliser CSS pour le positionner ailleurs sur la page?la source
En HTML5, il y a l'attribut formulaire . Fondamentalement
la source
<button type="submit" form="frmFoo" onclick="!this.form&&$('#'+$(this).attr('form')).submit()">
solution de rechange gracieuse: comme l'ont révélé des expériences, this.form est le formulaire attaché DomElement, alors qu'il est nul sinon. // edit: jQuery, mais possible avec de la vanille, trop ofc<button type="submit" form="frmFoo" onclick="!this.form && document.getElementById('myform').submit()">
Une solution qui fonctionne très bien pour moi, manque toujours ici. Cela nécessite d'avoir un élément
<submit>
ou un<input type="submit">
élément visuellement caché à l' intérieur du<form>
, et un<label>
élément associé à l' extérieur. Cela ressemblerait à ceci:Ce lien vous permet désormais de «cliquer» sur l'
<submit>
élément de formulaire en cliquant sur l'<label>
élément.la source
label
n'est pas un élément focalisable (AFAIK), donc ce n'est pas intuitif pour un utilisateur qui utilise uniquement le clavier pour naviguer vers le `` bouton '', puis appuyez sur espace pour activer ce bouton par exemple. (Je me rends compte que vous pouvez appuyer à la<enter>
place, mais ce n'est pas la seule façon dont les gens ont l'habitude de naviguer dans les formulaires avec le clavier)label
bouton de l'onglet via, vous pouvez utiliser l'tabindex
attribut HTML:<label for="submit-form" tabindex="0">Submit</label>
selon cette questionsi vous pouvez utiliser jQuery, vous pouvez l'utiliser
Donc, l'essentiel est de créer un bouton comme Soumettre, et de mettre le vrai bouton de soumission dans le formulaire (bien sûr, le cacher), et de soumettre le formulaire par jquery en cliquant sur le bouton 'Fake Submit'. J'espère que ça aide.
la source
$('button[form]').click(function (){ var formId = $(this).attr('form'); $('#' + formId).submit(); });
Cela a fonctionné pour moi, d'avoir un bouton d'envoi à distance pour un formulaire.
la source
Similaire à une autre solution ici, avec des modifications mineures:
https://www.w3schools.com/tags/att_form.asp
la source
Essaye ça:
Bien que je suggère d'ajouter un
id
au formulaire et d'y accéder au lieu dedocument.forms[index]
.la source
Vous pouvez toujours utiliser jQuery:
la source
Voici une solution assez solide qui incorpore 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 compatibilité descendante avec IE (et même Edge 13), vous ne pouvez pas utiliser l'
form="your-form"
attribut .Utilisez une entrée de soumission standard sans affichage et ajoutez une étiquette pour celle-ci en dehors du formulaire:
Notez l'utilisation de
display: none;
. C'est intentionnel. L'utilisation de la.hidden
classe de bootstrap est en conflit avec jQuery.show()
et.hide()
, et est depuis déconseillée dans Bootstrap 4.Maintenant, ajoutez simplement une étiquette pour votre soumission, (conçue pour bootstrap):
Contrairement à d'autres solutions, j'utilise également tabindex - défini sur 0 - ce qui signifie que nous sommes désormais compatibles avec la tabulation du clavier. L'ajout de l'
role="button"
attribut lui donne le style CSScursor: pointer
. Et voilà. ( Voir ce violon ).la source
Enter
n'a aucun effet. Ainsi, pouvoir y tabuler semble un peu inutile. Existe-t-il un moyen de le faire sans utiliser JavaScript?<input... />
syntaxe bâclée et invalide à fermeture automatique, que presque tout le monde utilise de manière flagrante et incorrecte ici (aussi), à la bonne balise no-close vide! :) Bravo!Cela fonctionne parfaitement! ;)
Cela peut être fait en utilisant Ajax et avec ce que j'appelle: "un élément de miroir de formulaire". Au lieu d'envoyer un formulaire avec un élément à l'extérieur, vous pouvez créer un faux formulaire. Le formulaire précédent n'est pas nécessaire.
Le code ajax serait comme:
Ceci est très utile si vous souhaitez envoyer des données dans un autre formulaire sans soumettre le formulaire parent.
Ce code peut probablement être adapté / optimisé en fonction des besoins. Cela fonctionne parfaitement !! ;) Fonctionne également si vous voulez une boîte d'option de sélection comme celle-ci:
J'espère que cela a aidé quelqu'un comme ça m'a aidé. ;)
la source
Peut-être que cela pourrait fonctionner, mais je ne sais pas si c'est du HTML valide.
la source
J'ai eu un problème où j'essayais de masquer le formulaire à partir d'un élément de cellule de tableau, mais toujours d'afficher le bouton d'envoi des formulaires. Le problème était que l'élément de formulaire occupait toujours un espace vierge supplémentaire, ce qui rend le format de ma cellule de tableau bizarre. L'affichage: aucun et la visibilité: les attributs cachés ne fonctionnaient pas car cela masquerait également le bouton d'envoi, car il était contenu dans le formulaire que j'essayais de cacher. La réponse simple était de définir la hauteur des formulaires à presque rien en utilisant CSS
Alors,
CSS -
travaillé pour moi.
la source
J'ai utilisé de cette façon, et j'ai bien aimé, cela valide le formulaire avant de le soumettre est également compatible avec safari / google. pas de jquery nn
la source