139 votes

Empêcher la soumission d'un champ de saisie dans un formulaire

Je suis en train d'écrire un javascript (un greasemonkey/userscript) qui va insérer des champs de saisie dans un formulaire sur un site web.

Le problème est que je ne veux pas que ces champs de saisie affectent le formulaire de quelque manière que ce soit, je ne veux pas qu'ils soient soumis lorsque le formulaire est soumis, je veux seulement que mon javascript ait accès à leurs valeurs.

Existe-t-il un moyen d'ajouter des champs de saisie au milieu d'un formulaire et de ne pas les soumettre lors de l'envoi du formulaire ?

L'idéal serait évidemment que les champs de saisie ne se trouvent pas dans l'élément de formulaire, mais je veux que la mise en page de ma page résultante fasse apparaître les champs de saisie insérés entre les éléments du formulaire original.

2 votes

Quel est le problème s'ils sont soumis ? Vous pouvez choisir les champs à traiter dans le langage côté serveur.

7 votes

Je ne crois pas que les éléments de formulaire sans nom s'affichent lorsqu'un formulaire est soumis. Si vous pouvez écrire votre JS pour qu'il se réfère à eux par ID, vous pouvez laisser leurs noms vides, ce qui les empêche effectivement de se soumettre.

4 votes

Laissez le champ de l'attribut nom vide

182voto

Gal Points 4766

Vous pouvez insérer des champs de saisie sans l'attribut "name" :

<input type="text" id="in-between" />

Ou vous pouvez simplement les supprimer une fois que le formulaire est soumis (en jQuery ) :

$("form").submit(function() {
   $(this).children('#in-between').remove();
});

7 votes

L'omission du nom empêche la soumission de la demande ? Cool, je ne le savais pas. Cela fonctionne-t-il sur tous les navigateurs ? Cela fait-il partie d'une norme, ou est-ce une bizarrerie de mise en œuvre ?

0 votes

Si les éléments d'entrée sans attribut de nom ne sont pas soumis, il s'agit d'une solution parfaite et incroyablement simple ! Cette solution est-elle compatible avec tous les navigateurs ? Quelqu'un peut-il le confirmer ?

2 votes

@Acorn Je ne suis pas tout à fait sûr, mais ça vaut la peine d'être lu. Essentiellement, si vous omettez la valeur de l'attribut "name", vous ne pouvez accéder à cette valeur par aucune méthode... il se peut donc que la valeur soit simplement ignorée par le navigateur. Si la sécurité est essentielle pour vous, choisissez l'option jquery/javascript (notez simplement que les champs seront soumis lorsque javascript est facilement désactivé - ne comptez donc pas sur vos mécanismes de sécurité).

64voto

Johrn Points 731

La chose la plus simple à faire serait d'insérer les éléments avec la balise disabled attribut.

<input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" />

De cette façon, vous pouvez toujours y accéder en tant qu'enfants du formulaire.

Les champs désactivés ont l'inconvénient de ne pas permettre à l'utilisateur d'interagir avec eux. disabled le champ de texte, l'utilisateur ne peut pas sélectionner le texte. Si vous avez un disabled l'utilisateur ne peut pas modifier son état.

Vous pouvez également écrire du javascript qui se déclenche à la soumission du formulaire pour supprimer les champs que vous ne souhaitez pas soumettre.

0 votes

L'idée est que mes champs insérés soient utilisables afin que l'utilisateur puisse modifier les cases à cocher, etc. et les soumettre ensuite à mon javascript.

3 votes

L'option "désactivé" peut toujours fonctionner, à condition de ne désactiver les champs qu'à l'envoi ou en fonction de la sélection d'une case à cocher. De cette façon, vous ne vous débarrassez pas de l'option name que vous pouvez conserver si vous souhaitez l'utiliser ultérieurement.

0 votes

C'est idéal lorsque vous devez soumettre le formulaire en utilisant AJAX et que vous ne voulez pas supprimer vos entrées du formulaire ou supprimer leur name attribut.

26voto

Lesha Pipiev Points 810

Essayez simplement d'enlever nom de l'élément d'entrée.
Il doit donc ressembler à

<input type="checkbox" checked="" id="class_box_2" value="2">

0 votes

Cela devrait être la réponse :))

3 votes

Cela fonctionne pour les cases à cocher. Notez toutefois que cela empêchera la désélection automatique de l'autre bouton radio lorsqu'il est utilisé avec des boutons radio.

11voto

Jacob Relkin Points 90729

Vous pouvez écrire un gestionnaire d'événement pour onsubmit qui supprime le name de tous les champs de saisie que vous souhaitez ne pas inclure dans la soumission du formulaire.

Voici un exemple rapide non testé :

var noSubmitElements = [ 'someFormElementID1', 'someFormElementID2' ]; //...
function submitForm() {
    for( var i = 0, j = noSubmitElements.length; i < j; i++ ) {
        document.getElementById(noSubmitElements[i]).removeAttribute('name');
    }
}
form.onsubmit = submitForm;

0 votes

Certains types d'entrées (par exemple radio ) ne fonctionnent pas correctement sans l'option name attribut.

1voto

ring bearer Points 8369

Traitez l'envoi du formulaire dans une fonction via onSubmit() et effectuez quelque chose comme ci-dessous pour supprimer l'élément du formulaire : Utilisez getElementById() du DOM, puis en utilisant [object].parentNode.removeChild([object])

Supposons que le champ en question ait un attribut id "mon_champ_removable". code :

var remEl = document.getElementById("my_removable_field");
if ( remEl.parentNode && remEl.parentNode.removeChild ) {
remEl.parentNode.removeChild(remEl);
}

Cela vous permettra d'obtenir exactement ce que vous recherchez.

Prograide.com

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.

Powered by:

X