J'ai réalisé que Chrome, semble-t-il, ne me permettra pas de me cacher <option>
dans un fichier <select>
. Firefox le fera.
J'ai besoin de masquer les <option>
s qui correspondent à un critère de recherche. Dans les outils Web Chrome, je peux voir qu'ils sont correctement définis display: none;
par mon JavaScript, mais une fois que le <select>
menu est cliqué, ils sont affichés.
Comment puis-je faire en sorte que ceux <option>
qui correspondent à mes critères de recherche ne s'affichent PAS lorsque l'utilisateur clique sur le menu? Merci!
javascript
jquery
css
dom
Jesse Atkinson
la source
la source
Réponses:
Vous devez implémenter deux méthodes pour se cacher.
display: none
fonctionne pour FF, mais pas Chrome ou IE. La deuxième méthode consiste donc à envelopper le<option>
dans un<span>
avecdisplay: none
. FF ne le fera pas (HTML techniquement non valide, selon la spécification) mais Chrome et IE le feront et masqueront l'option.EDIT: Oh ouais, j'ai déjà implémenté cela dans jQuery:
EDIT 2: Voici comment vous utiliseriez cette fonction:
EDIT 3: Ajout d'une vérification supplémentaire suggérée par @ user1521986
la source
<select>
(en utilisant jQuery.val()
) sera renvoyéenull
. Je viens de tester cela dans Chrome 29, alors les Googleurs méfiez-vous!Pour HTML5, vous pouvez utiliser l'attribut «masqué».
Il n'est pas pris en charge par IE <11. Mais si vous n'avez besoin que de masquer quelques éléments, il serait peut-être préférable de simplement définir l'attribut masqué en combinaison avec désactivé par rapport à l'ajout / suppression d'éléments ou à des constructions sémantiquement incorrectes.
Référence .
la source
disabled
que les navigateurs qui ne prennent pas en charge l' attribut global HTML5hidden
aient une indication visuelle pour l'utilisateur.<option hidden disabled>
, de sorte qu'il se cache dans tous les bons navigateurs et le désactive sur les autres.Je vous suggère de ne pas utiliser les solutions qui utilisent un
<span>
wrapper car ce n'est pas du HTML valide, ce qui pourrait causer des problèmes plus tard. Je pense que la solution préférée est de supprimer toutes les options que vous souhaitez masquer et de les restaurer si nécessaire. En utilisant jQuery, vous n'aurez besoin que de ces 3 fonctions:La première fonction enregistrera le contenu original de la sélection . Pour plus de sécurité, vous pouvez appeler cette fonction lorsque vous chargez la page.
Cette fonction suivante appelle la fonction ci-dessus pour s'assurer que le contenu d'origine a été enregistré, puis supprime simplement les options du DOM.
La dernière fonction peut être utilisée chaque fois que vous souhaitez "réinitialiser" toutes les options d'origine.
Notez que toutes ces fonctions s'attendent à ce que vous passiez des éléments jQuery. Par exemple:
Voici un exemple de travail: http://jsfiddle.net/9CYjy/23/
la source
var value=$select.val(); $select.html(ogHTML); $select.val(value);
pour garder la valeur sélectionnée sélectionnée même après la restauration.La réponse de Ryan P devrait être changée en:
Sinon, il est enveloppé dans trop de balises
la source
<select>
ne doit contenir que des éléments de support de script<option>
or<optgroup>
ou. Vous devez donc éviter d'utiliser des<span>
wrappers non valides .La fonction toggleOption n'est pas parfaite et a introduit de vilains bugs dans mon application. jQuery sera confondu avec .val () et .arraySerialize () Essayez de sélectionner les options 4 et 5 pour voir ce que je veux dire:
la source
Les entrées sélectionnées sont délicates de cette manière. Que diriez-vous de le désactiver à la place, cela fonctionnera entre les navigateurs:
Cela désactivera tous les autres
<option>
éléments, mais vous pouvez sélectionner celui que vous voulez.Voici une démo: http://jsfiddle.net/jYWrH/
Remarque: si vous souhaitez supprimer la propriété disabled d'un élément, vous pouvez utiliser
.removeProp('disabled')
.Mettre à jour
Vous pouvez enregistrer les
<option>
éléments que vous souhaitez masquer dans l'élément de sélection masqué:Vous pouvez ensuite rajouter les
<option>
éléments à l'élément de sélection d'origine:Dans ces deux exemples, on s'attend à ce que l'élément de sélection visible ait l'id de
visible
et que l'élément de sélection masqué ait l'id dehidden
.Voici une démo: http://jsfiddle.net/jYWrH/1/
Notez que
.on()
c'est nouveau dans jQuery 1.7 et que l'utilisation de cette réponse est la même que.bind()
: http://api.jquery.com/onla source
Réponse simple: vous ne pouvez pas. Les éléments de formulaire ont des capacités de style très limitées.
La meilleure alternative serait de définir
disabled=true
l'option (et peut-être une couleur grise, puisque seul IE le fait automatiquement), ce qui rendra l'option non cliquable.Sinon, si vous le pouvez, supprimez complètement l'
option
élément.la source
la source
Puisque vous utilisez déjà JS, vous pouvez créer un élément SELECT masqué sur la page, et pour chaque élément que vous essayez de masquer dans cette liste, déplacez-le vers la liste masquée. De cette façon, ils peuvent être facilement restaurés.
Je ne connais pas de manière désinvolte de le faire en CSS pur ... J'aurais pensé que l'affichage: aucune astuce n'aurait fonctionné.
la source
!!! AVERTISSEMENT !!!
Remplacez le deuxième "IF" par "WHILE" ou ne fonctionne pas!
la source
Vous devez les supprimer de l'
<select>
utilisation de JavaScript. C'est le seul moyen garanti de les faire disparaître.la source
$('options').remove();
celui-ci semble fonctionner pour moi en chrome
la source
Tard dans le match, mais la plupart semblent assez compliqués.
Voici comment je l'ai fait:
balisage de select-1:
balisage de select-2:
la source