J'ai une boîte de sélection. Les options ont été stylisées de différentes couleurs via un fichier CSS référencé. Je veux pouvoir sélectionner une option et changer la couleur du texte de la boîte de sélection fermée à la couleur de l'option choisie.
<select id="mySelect" class="yellowText">
<option class="greenText" value="Apple" >Apple</option>
<option class="redText" value="banana" >Banana</option>
<option class="blueText" value="grape" >Grape</option>
</select>
Donc, si je sélectionne Banana, le texte devrait passer du jaune au rouge.
J'ai essayé:
onchange="this.style.color = this.options[this.selectedIndex].style.color;"
Mais cela ne fonctionne que si je définis mes styles dans les balises d'option dans le document html.
J'ai également essayé JavaScript:
function setSelectColor(thisElement){
var thisElem = document.getElementById(thisElement);
var thisOption = thisElem.options[thisElem.selectedIndex];
var newColor = getStyle(thisOption,"color");
alert("New Color: "+ newColor);
}
Mais cela renvoie toujours la couleur: blanc. La fonction getStyle fonctionne partout ailleurs je l'utilise donc je ne pense pas que ce soit le problème.
J'ai obtenu getStyle à partir de ce site Web:
function getStyle(oElm, strCssRule){
var strValue = "";
if(document.defaultView && document.defaultView.getComputedStyle){
strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
}
else if(oElm.currentStyle){
strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
strValue = oElm.currentStyle[strCssRule];
}
return strValue;
}
Comment puis-je résoudre ce problème avec JavaScript?
Essaye ça:
.greenText{ background-color:green; }
.blueText{ background-color:blue; }
.redText{ background-color:red; }
<select
onchange="this.className=this.options[this.selectedIndex].className"
class="greenText">
<option class="greenText" value="Apple" >Apple</option>
<option class="redText" value="banana" >Banana</option>
<option class="blueText" value="grape" >Grape</option>
</select>
CAS UNE COULEUR - CSS uniquement
Juste pour enregistrer mon expérience, où je voulais définir seulement la couleur du option sélectionnée à une couleur spécifique.
J'ai d'abord essayé de définir par css uniquement la couleur de l'option sélectionnée sans succès.
Ensuite, après avoir essayé quelques combinaisons, cela a fonctionné pour moi avec SCSS:
select {
color: white; // color of the selected option
option {
color: black; // color of all the other options
}
}
Jetez un oeil à un exemple de travail avec seulement CSS:
select {
color: yellow; // color of the selected option
}
select option {
color: black; // color of all the other options
}
<select id="mySelect">
<option value="Apple" >Apple</option>
<option value="banana" >Banana</option>
<option value="grape" >Grape</option>
</select>
Pour différentes couleurs, selon l'option sélectionnée, vous devrez composer avec js.
Vous pourriez le faire comme ça.
[~ # ~] js [~ # ~]
var select = document.getElementById('mySelect');
select.onchange = function () {
select.className = this.options[this.selectedIndex].className;
}
[~ # ~] css [~ # ~]
.redText {
background-color:#F00;
}
.greenText {
background-color:#0F0;
}
.blueText {
background-color:#00F;
}
Vous pouvez utiliser option { background-color: #FFF; }
si vous voulez que la liste soit blanche.
[~ # ~] html [~ # ~]
<select id="mySelect" class="greenText">
<option class="greenText" value="Apple" >Apple</option>
<option class="redText" value="banana" >Banana</option>
<option class="blueText" value="grape" >Grape</option>
</select>
Comme il s'agit d'un select
, cela n'a pas vraiment de sens d'utiliser .yellowText
comme aucun sélectionné si c'est ce que vous vouliez dire car quelque chose doit être sélectionné.
Code JQuery:
$('#mySelect').change(function () {
$('#mySelect').css("background", $("select option:selected").css("background-color"));
});
Cela remplacera le select
background-color
avec option
sélectionné background-color
.