web-dev-qa-db-fra.com

Comment éviter d'envoyer des champs de saisie masqués par l'affichage: aucun à un serveur?

Imaginez que vous ayez un formulaire dans lequel vous changez la visibilité de plusieurs champs. Et si le champ n'est pas affiché, vous ne voulez pas que sa valeur soit demandée.

Comment gérez-vous cette situation?

85
glaz666

La définition d'un élément de formulaire sur désactivé l'empêchera d'aller sur le serveur, par exemple:

<input disabled="disabled" type="text" name="test"/>

En javascript, cela signifierait quelque chose comme ceci:

var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
    if(inputs[i].style.display == 'none') {
        inputs[i].disabled = true;
    }
}
document.forms[0].submit();

Dans jQuery:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();
124
karim79

Vous pouvez utiliser javascript pour définir l'attribut désactivé. L'événement de clic sur le bouton "soumettre" est probablement le meilleur endroit pour le faire.

Cependant, je déconseille de faire cela du tout. Si possible, vous devez filtrer votre requête sur le serveur. Ce sera plus fiable.

13
Benedict Cohen

Si vous souhaitez désactiver tous les éléments ou certains éléments d'un élément parent masqué, vous pouvez utiliser

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

Cet exemple http://jsfiddle.net/gKsTS/ désactive toutes les zones de texte dans un div caché

7
macio.Jun

Qu'en est-il de:

$('#divID').children(":input").prop("disabled", true); // disable

et

$('#divID').children(":input").prop("disabled", false); // enable

Pour basculer toutes les entrées enfants (sélections, cases à cocher, entrées, zones de texte, etc.) dans une div cachée.

5
Antonio Max

Une solution très simple (mais pas toujours la plus pratique) consiste à supprimer l'attribut "nom" - la norme exige que les navigateurs n'envoient pas de valeurs sans nom, et tous les navigateurs que je connais respectent cette règle.

3
jsalvata

Je supprimerais la valeur de l'entrée ou détacherais l'objet d'entrée du DOM afin qu'il n'existe pas pour être publié en premier lieu.

1
JMP