J'ai un select
champ de formulaire que je veux marquer comme "lecture seule", car l'utilisateur ne peut pas modifier la valeur, mais la valeur est toujours soumise avec le formulaire. L'utilisation de l' disabled
attribut empêche l'utilisateur de modifier la valeur, mais ne soumet pas la valeur avec le formulaire.
L' readonly
attribut n'est disponible que pour les champs input
et textarea
, mais c'est essentiellement ce que je veux. Y a-t-il un moyen de faire fonctionner cela?
Deux possibilités que j'envisage incluent:
- Au lieu de désactiver le
select
, désactivez tous lesoption
s et utilisez CSS pour griser la sélection afin qu'elle semble désactivée. - Ajoutez un gestionnaire d'événements de clic au bouton d'envoi afin qu'il active tous les menus déroulants désactivés avant de soumettre le formulaire.
javascript
html
css
forms
html-select
Marquis Wang
la source
la source
trafalmadorian
arrivé tard, mais les solutions fournies par @ workest sont les meilleures. Il désactive toutes les entrées non sélectionnées. Cela fonctionnerait également si plusieurs options sont activées.$('#toSelect')find(':not(:selected)').prop('disabled',true);
Réponses:
Où
select_name
est le nom que vous donneriez normalement au fichier<select>
.Une autre option.
Maintenant, avec celui-ci, j'ai remarqué que selon le serveur Web que vous utilisez, vous devrez peut-être mettre l'
hidden
entrée avant ou après le<select>
.Si ma mémoire me sert correctement, avec IIS, vous le mettez avant, avec Apache vous le mettez après. Comme toujours, les tests sont essentiels.
la source
Désactivez les champs, puis activez-les avant l'envoi du formulaire:
Code jQuery:
la source
J'ai cherché une solution pour cela, et comme je n'ai pas trouvé de solution dans ce fil, j'ai fait la mienne.
Simple, vous floutez simplement le champ lorsque vous vous concentrez dessus, quelque chose comme le désactiver, mais vous envoyez en fait ses données.
la source
J'ai été confronté à un scénario légèrement différent, en ce sens que je voulais seulement ne pas permettre à l'utilisateur de modifier la valeur sélectionnée en fonction d'une boîte de sélection antérieure. Ce que j'ai fini par faire, c'est simplement désactiver toutes les autres options non sélectionnées dans la boîte de sélection en utilisant
la source
attr
devrait changer avecprop
, ressemblerait à quelque chose comme$('#toSelect')find(':not(:selected)').prop('disabled',true);
Même solution suggérée par Tres sans utiliser jQuery
Cela peut aider quelqu'un à mieux comprendre, mais est évidemment moins flexible que celui de jQuery.
la source
getElementsByTagName('select')
?il ne fonctionne pas avec le: sélecteur d'entrée pour les champs sélectionnés, utilisez ceci:
la source
J'utilise le code suivant pour désactiver les options dans les sélections
la source
Le moyen le plus simple que j'ai trouvé était de créer une minuscule fonction javascript liée à votre formulaire:
et vous l'appelez dans votre formulaire ici:
Ou vous pouvez l'appeler dans la fonction que vous utilisez pour vérifier votre formulaire :)
la source
Ajoutez simplement une ligne avant de soumettre.
la source
Ou utilisez du JavaScript pour changer le nom de la sélection et la désactiver. De cette façon, la sélection est toujours soumise, mais en utilisant un nom que vous ne vérifiez pas.
la source
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 tant que le champ est désactivé par programmation via jquery en utilisant .prop () ou .attr () ... alors accéder à la valeur par .val (), .serialize () ou .serializeArra () retournera toujours le valeur même si désactivé :)
Prise sans vergogne: https://github.com/Jezternz/jq-disabled-inputs
la source
Sur la base de la solution de la Jordanie, j'ai créé une fonction qui crée automatiquement une entrée masquée avec le même nom et la même valeur de la sélection que vous souhaitez invalider. Le premier paramètre peut être un id ou un élément jquery; le second est un paramètre optionnel booléen où "true" désactive et "false" active l'entrée. S'il est omis, le deuxième paramètre commute la sélection entre «activé» et «désactivé».
la source
J'ai trouvé une solution viable: supprimez tous les éléments sauf celui sélectionné. Vous pouvez ensuite changer le style en quelque chose qui semble également désactivé. Utilisation de jQuery:
la source
la source
Une autre option consiste à utiliser l'attribut readonly.
En lecture seule, la valeur est toujours soumise, le champ de saisie est grisé et l'utilisateur ne peut pas le modifier.
Éditer:
Extrait de http://www.w3.org/TR/html401/interact/forms.html#adef-readonly :
Quand il dit que l'élément peut réussir, cela signifie qu'il peut être soumis, comme indiqué ici: http://www.w3.org/TR/html401/interact/forms.html#successful-controls
la source