Imaginez que vous ayez un formulaire dans lequel vous permutez 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?
Réponses:
Définir 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();
attr("disabled", true)
vous devriez utiliser prop("disabled", true)
api.jquery.com/prop
.prop()
il .attr()
est recommandé d' utiliser à la place de pour obtenir ET définir à la fois les propriétés désactivées et vérifiées. La vérification et / ou le réglage en utilisant .attr()
renverra dans certains cas des résultats indésirables. Veuillez lire la documentation de jQuery avant de commenter ce à quoi yorch faisait référence.
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éconseillerais du tout de faire cela. 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 dans 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 masqué
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.) à l'intérieur d'un div masqué.
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.
:input
lieu deinput
vous pouvez également désactiver facilement tous les élémentsselect
ettextarea