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?
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();
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.
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é
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.
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.
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.