92 votes

Largeur de la liste déroulante dans IE

Dans IE, la liste déroulante prend la même largeur que la liste déroulante (j'espère que cela a du sens), tandis que dans Firefox, la largeur de la liste déroulante varie en fonction du contenu.

Cela signifie essentiellement que je dois m'assurer que la liste déroulante est suffisamment large pour afficher la sélection la plus longue possible. Cela rend ma page très moche :(

Existe-t-il une solution de contournement à ce problème? Comment utiliser CSS pour définir différentes largeurs pour la liste déroulante et la liste déroulante?

102voto

BalusC Points 498232

Voici un autre jQuery exemple basé sur. Contrairement à toutes les autres réponses postées ici, il prend tous les évènements souris et clavier en compte, en particulier clics:

if (!$.support.leadingWhitespace) { // if IE6/7/8
    $('select.wide')
        .bind('focus mouseover', function() { $(this).addClass('expand').removeClass('clicked'); })
        .bind('click', function() { $(this).toggleClass('clicked'); })
        .bind('mouseout', function() { if (!$(this).hasClass('clicked')) { $(this).removeClass('expand'); }})
        .bind('blur', function() { $(this).removeClass('expand clicked'); });
}

Utiliser en combinaison avec ce morceau de CSS:

select {
    width: 150px; /* Or whatever width you want. */
}
select.expand {
    width: auto;
}

Tout ce que vous devez faire est d'ajouter la classe wide à la liste déroulante élément(s) en question.

<select class="wide">
    ...
</select>

Voici un jsfiddle exemple. Espérons que cette aide.

14voto

La création de votre propre liste déroulante est plus d'une douleur que ce qu'il vaut. Vous pouvez utiliser du javascript pour faire de l'IE déroulant travail.

Il utilise un peu de la YUI bibliothèque et une extension spéciale pour la fixation d'internet explorer, sélectionnez les cases.

Vous devez inclure les éléments suivants et les envelopper vos éléments dans un

Mettre avant la balise body de votre page:

<script src="http://us.js2.yimg.com/us.js.yimg.com/lib/common/utils/2/yahoo_2.0.0-b3.js" type="text/javascript">
</script>
<script src="http://us.js2.yimg.com/us.js.yimg.com/lib/common/utils/2/event_2.0.0-b3.js" type="text/javascript">
</script>
<script src="http://us.js2.yimg.com/us.js.yimg.com/lib/common/utils/2/dom_2.0.2-b3.js" type="text/javascript">
</script>
<script src="ie-select-width-fix.js" type="text/javascript">
</script>
<script>
// for each select box you want to affect, apply this:
var s1 = new YAHOO.Hack.FixIESelectWidth( 's1' ); // s1 is the ID of the select box you want to affect
</script>

Post acceptation edit:

Vous pouvez aussi le faire sans l'YUI bibliothèque et Hack de contrôle. Tout ce que vous devez faire est de mettre un onmouseover="this.style.width='auto'" onmouseout="this.style.width='100px'" (ou ce que vous voulez) sur l'élément select. Le YUI contrôle lui donne cette belle animation, mais il n'est pas nécessaire. Cette tâche peut également être réalisé avec jquery et d'autres bibliothèques (bien que, je n'ai pas trouvé de documentation explicite à ce sujet)

-- modification de la modifier: IE a un problème avec la onmouseout pour sélectionner des contrôles (il ne tient pas compte du passage de la souris sur les options d'un passage de la souris sur le bouton sélectionner). Ce fait à l'aide d'un mouseout très difficile. La première solution est la meilleure que j'ai trouvé jusqu'à présent.

12voto

Sai Points 127

vous pouvez juste essayer ce qui suit ...

   styleClass="someStyleWidth"
  onmousedown="javascript:if(navigator.appName=='Microsoft Internet Explorer'){this.style.position='absolute';this.style.width='auto'}" 
  onblur="this.style.position='';this.style.width=''"
 

J'ai essayé et ça marche pour moi. Rien d'autre n'est requis.

9voto

Justin Fisher Points 176

J'ai utilisé la solution suivante et cela semble bien fonctionner dans la plupart des situations.

 <style>
select{width:100px}
</style>

<html>
<select onmousedown="if($.browser.msie){this.style.position='absolute';this.style.width='auto'}" onblur="this.style.position='';this.style.width=''">
  <option>One</option>
  <option>Two - A long option that gets cut off in IE</option>
</select>
</html>
 

Remarque: le fichier $ .browser.msie nécessite jquery.

7voto

Tinus Points 161

@Vous avez également besoin d'ajouter un gestionnaire d'événements Blur

 $(document).ready(function(){
    $("#dropdown").mousedown(function(){
        if($.browser.msie) {
            $(this).css("width","auto");
        }
    });
    $("#dropdown").change(function(){
        if ($.browser.msie) {
            $(this).css("width","175px");
        }
    });
    $("#dropdown").blur(function(){
        if ($.browser.msie) {
            $(this).css("width","175px");
        }
    });
});
 

Cependant, cela élargira toujours la zone de sélection en cliquant, au lieu de simplement les éléments. (et cela semble échouer dans IE6, mais fonctionne parfaitement dans Chrome et IE7)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X