Au lieu d'un bouton d'envoi, j'ai un lien :
<form>
<a href="#"> submit </a>
</form>
Puis-je faire en sorte qu'il soumette le formulaire lorsqu'il est cliqué ?
Au lieu d'un bouton d'envoi, j'ai un lien :
<form>
<a href="#"> submit </a>
</form>
Puis-je faire en sorte qu'il soumette le formulaire lorsqu'il est cliqué ?
Le meilleur moyen est d'insérer une balise d'entrée appropriée :
<input type="submit" value="submit" />
<form id="form-id">
<button id="your-id">submit</button>
</form>
var form = document.getElementById("form-id");
document.getElementById("your-id").addEventListener("click", function () {
form.submit();
});
Entourez ce dernier code JavaScript par un DOMContentLoaded
événement (choisissez seulement load
pour compatibilité avec le passé ) si vous ne l'avez pas encore fait :
window.addEventListener("DOMContentLoaded", function () {
var form = document.... // copy the last code block!
});
Ajouter un onclick
au lien et un attribut id
au formulaire :
<form id="form-id">
<a href="#" onclick="document.getElementById('form-id').submit();"> submit </a>
</form>
Quel que soit le moyen que vous choisissez, vous devez appeler formObject.submit()
à terme (où formObject
est l'objet DOM du <form>
tag).
Vous devez également lier un tel gestionnaire d'événement, qui appelle formObject.submit()
Il est donc appelé lorsque l'utilisateur clique sur un lien ou un bouton spécifique. Il y a deux façons de procéder :
Recommandé : Lier un écouteur d'événements à l'objet DOM.
// 1. Acquire a reference to our <form>.
// This can also be done by setting <form name="blub">:
// var form = document.forms.blub;
var form = document.getElementById("form-id");
// 2. Get a reference to our preferred element (link/button, see below) and
// add an event listener for the "click" event.
document.getElementById("your-id").addEventListener("click", function () {
form.submit();
});
Non recommandé : Insérez du JavaScript en ligne. Il y a plusieurs raisons pour lesquelles cette technique n'est pas recommandable. L'un des principaux arguments est que vous mélangez le balisage (HTML) avec les scripts (JS). Le code devient désorganisé et plutôt difficile à maintenir.
<a href="#" onclick="document.getElementById('form-id').submit();">submit</a>
<button onclick="document.getElementById('form-id').submit();">submit</button>
Maintenant, nous arrivons au moment où vous devez décider de l'élément de l'interface utilisateur qui déclenche l'appel submit().
Un bouton
<button>submit</button>
Un lien
<a href="#">submit</a>
Appliquez les techniques susmentionnées afin d'ajouter un écouteur d'événements.
Je voulais l'appliquer mais cela ne semble pas fonctionner de mon côté. Voici un bidouillage, jsfiddle.net/rbhr9wt2
@user1149244 Dans le volet JavaScript de jsFiddle, cliquez sur "JavaScript", puis définissez "Load Type" sur "No wrap - in <body>". (ou <head>). Par défaut, il est réglé sur "onLoad", après quoi DOMContentReady ne se déclenche plus.
Remarque : Si votre formulaire comporte un bouton avec attr name="submit"
le submit()
de votre formulaire ne sera pas accessible.
Si vous utilisez jQuery et que vous avez besoin d'une solution en ligne, cela fonctionnera très bien ;
<a href="#" onclick="$(this).closest('form').submit();">submit form</a>
Aussi, vous pourriez vouloir remplacer
<a href="#">text</a>
avec
<a href="javascript:void(0);">text</a>
afin que l'utilisateur ne fasse pas défiler la page vers le haut lorsqu'il clique sur le lien.
Je crois qu'il serait préférable de le faire dans un <span>texte</span>. Ce n'est pas un lien, et href:javascript n'est pas bon. (bientôt mauvais avec les prochaines raisons de sécurité ... le javascript inlined doit être interdit un jour.
Je suis d'accord. Compte tenu de la nature de la question, j'ai opté pour une réponse simple. Ce que je fais personnellement, c'est utiliser href="#"
et ensuite sélectionner tous ces liens avec jquery et appeler e.preventDefault()
dans le click
pour que le navigateur ne défile pas.
Je préfère personnellement cette réponse. Simple et propre et facile à mettre en œuvre si votre page utilise JQuery. Très flexible également, car j'ai une page contenant plusieurs formulaires et cela fonctionne parfaitement.
Vous pourriez donner des identifiants au formulaire et au lien, puis vous abonner à la liste de diffusion. onclick
événement du lien et submit
le formulaire :
<form id="myform" action="" method="POST">
<a href="#" id="mylink"> submit </a>
</form>
et ensuite :
window.onload = function() {
document.getElementById('mylink').onclick = function() {
document.getElementById('myform').submit();
return false;
};
};
Je vous recommande d'utiliser un bouton d'envoi pour soumettre les formulaires, car il respecte la sémantique du balisage et fonctionne même pour les utilisateurs dont le javascript est désactivé.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Je l'utilise pour intégrer un formulaire complètement caché dans une page. Mais il y a des sauts de ligne avant et après le lien. Viennent-ils de l'élément de formulaire ? Et je voudrais ouvrir le lien dans un nouvel onglet/une nouvelle page,
target="_blank"
ne semble pas fonctionner.1 votes
tl;dr
<a role="button" aria-label="submit form" href="javascript:void(0)" onclick="document.querySelector('form').submit()">Submit</a>