web-dev-qa-db-fra.com

Comment puis-je obtenir la valeur de formulaire à partir d'un élément <input> désactivé

Le standard HTML pour les formulaires semble être tel que les éléments d’entrée désactivés ne contribuent pas à la collection nom/valeur du formulaire.

Y a-t-il AUCUN moyen de contourner cela? Je dois pouvoir activer et désactiver la désactivation, mais toujours renvoyer quelle que soit la valeur indiquée lors de la soumission du formulaire.

Je réalise que je peux utiliser JavaScript pour copier la valeur sur une entrée masquée avant que le formulaire ne soit soumis, mais je préférerais que non. Y a-t-il un moyen plus propre?

J'utilise ASP.NET, mais ce n'est pas ça qui compte.

34
lfonlfonlfon

Vous devriez utiliser le drapeau readOnly plutôt que disabled. Les champs en lecture seule ne peuvent pas être modifiés par l'utilisateur, mais sont toujours soumis avec le formulaire.

<input type="text" value="blah" readonly="true"/>
82
levik

Le standard HTML pour les formulaires semble être tel que les éléments d’entrée désactivés ne contribuent pas à la collection nom/valeur du formulaire.

C'est correct.

HACK: Vous pouvez utiliser Javascript pour, lors de la soumission:

  1. Désactivé désactivé
  2. Mis en lecture seule
  3. Soumettre!
19
Wayne

Si vous faites la valeur readonly , au lieu de la désactiver, le nom/la valeur du champ sera envoyé avec le reste des champs non désactivés.

Faites en sorte que le gestionnaire d'événements focus des champs en lecture seule transmette le focus au prochain champ éligible, afin que celui-ci se comporte davantage comme un élément désactivé. Certains navigateurs vous permettent de vous concentrer et de sélectionner des champs en lecture seule, tandis que d'autres vous permettent même de les coller dans un champ en lecture seule, bien qu'ils reviennent à la valeur d'origine onblur and onchange. 

<input type="text" value="" readonly="readonly">
9
kennebec

En tant que variante légèrement plus robuste du piratage de Wayne (qui pourrait être confondu par un bouton Précédent poussé), lors de la désactivation d'un contrôle: définissez readonly= true et className= 'disabled' au lieu de disabled= true, puis style .disabled de manière à ressembler à un champ désactivé.

8
bobince

J'ai créé un plugin rapide (Jquery uniquement), qui enregistre la valeur dans un champ de données lorsqu'une entrée est désactivée . Cela signifie simplement que le champ est désactivé par programme via jquery à l'aide de .prop () ou .attr. () ... puis accéder à la valeur par .val (), .serialize () ou .serializeArra () renverra toujours la valeur, même si elle est désactivée :)

https://github.com/Jezternz/jq-disabled-inputs

2
Josh Mc

Je suppose que c'est un bidouillage, mais semble bien fonctionner pour moi. Faire les deux! L'utilisateur voit les entrées désactivées, clairement masquées et le navigateur empêche toute interaction - mais il n'est pas soumis avec le formulaire. L'utilisateur ne voit pas le champ en lecture seule potentiellement désorientant, mais il est soumis avec le formulaire.

<input name="mode_d" size="8" value="mode" disabled>
<input name="mode"            value="mode" hidden readonly>
0
rickatech

C'est simple seulement deux étapes

  1. vérifie si l'entrée à laquelle vous souhaitez accéder est désactivée, puis supprimez son attribut "désactivé"

  2. Obtenez la valeur, puis ajoutez à nouveau l'attribut désactivé.

0
Mateen