2010-10-02 3 views
7

Voici le balisageDéclencher un élément de formulaire de sélection pour afficher ses options (drop ouvrir la liste déroulante des options) avec Javascript

<select id="person_prefix" name="prefix"> 
<option value=""></option> 
<option value="Dr" selected="selected">Dr</option> 
<option value="Mr">Mr</option> 
<option value="Ms">Ms</option> 
<option value="Mrs">Mrs</option> 
</select> 

et je veux déclencher un événement javascript afin que la liste des options tombe vers le bas. En utilisant jquery j'ai essayé ce qui suit:

$("#person_prefix").click(); 
$("#person_prefix").mousedown(); 
$("#person_prefix").change(); 

mais rien ne semble fonctionner. Quel événement est-ce et comment peut-il être déclenché?

Merci

+0

double possible de [Comment pouvez-vous dire un programme HTML SELECT pour tomber vers le bas (par exemple, en raison de mouseover)?] (Https: // stackoverflow .com/questions/249192/how-can-you-program-tell-an-html-select-to-drop-down-for-example-due) – rath

Répondre

4

Vous ne pouvez pas effectuer ce programme de manière croisée par programme. Vous pouvez remplacer la liste déroulante avec une solution entièrement personnalisée pas réellement affichant un élément <select> ... mais vous ne pouvez pas le montrer par programme, en particulier dans IE.

Le le plus proche vous pouvez faire est déplacer l'utilisateur à l'élément via .focus():

$("#person_prefix").focus(); 

Ceci avec un peu de style CSS pour quand il est concentré (:focus) est généralement une assez bonne façon d'attirer l'attention sur il.

2

Si vous définissez l'attribut taille, la sélection affichera le nombre d'options spécifiées en taille.

var sel= document.getElementsByName('select_1')[0]; 
var len= '10'// or sel.options.length; 
// safest: var len=sel.getElementsByTagName('*').length; 
sel.setAttribute('size',len) 

Le fait de remettre la taille à '1' réduit la sélection.

+0

Certains navigateurs ne prennent pas en compte les optgroups, d'autres les comptent comme des options et donc ne montre pas 10 options si vous avez 2 optgroups et spécifiez options.length ou 10. – kennebec

+0

Désolé, j'ai bégayé et fait écho mon propre commentaire. – kennebec

2

Vous ne peut pas événement déclencheur de clic sur certains élément de forme, mais la solution de contournement appropriée est ce plugin:
jQuery.customSelect

Le grand avantage est qu'il lance le véritable élément select (vous avez réellement cliquez sur un invisible select - opacity: 0), ce qui est important sur les appareils mobiles (par exemple, l'iPhone a sa propre disposition pour afficher les options select's). Si vous ne voulez pas télécharger le plugin entier, vous pouvez alors préparer la solution par vous-même puisque vous savez comment déclencher le select (cachez-le en réglant opacity: 0 - il sera toujours cliquable).

0

construction sur @ réponse de Kennebec, une version jQuery pour obtenir un compte des options et optgroups:

var sel = $('select.mySelectClass'); 
var count=0; 

sel.find('option').each(function() { 

    count++; 
}); 

sel.find('optgroups').each(function() { 

    count++; 
}); 

sel.attr('size',count); 
+4

'var count = sel.find ('option, optgroups'). Longueur;' –

7

je une fois chercher comment faire la même chose et n'a pas trouvé de solution de travail mais un gars de notre groupe javascript est venu avec un travail intelligent. Voici le code.

HTML

<input type="button" id="show" value="show" /> 
<select id="myslect"> 
    <option>nothing</option> 
    <option>something</option> 
    <option>anything</option> 
</select> 

Javascript

$("#show").click(function() { 
    var element = $("select")[0], 
     worked = false; 
    if(document.createEvent) { // chrome and safari 
     var e = document.createEvent("MouseEvents"); 
     e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
     worked = element.dispatchEvent(e); 
    } 
    if(!worked) { // unknown browser/error 
     alert("It didn't worked in your browser."); 
    } 
}); 

Je ne suis pas sûr de savoir comment relier au poste de groupe de sorte que vous pouvez voir tout le fil. Quoi qu'il en soit, les crédits à CJ Madolara. Bon travail!

Mise à jour:fonctionne uniquement sur Chrome et Safari

+0

Hey votre solution fonctionne pour moi mais les options de sélection disparaissent à la fin du clic. Comment le feriez-vous pour conserver les options de sélection affichées jusqu'à ce que l'une d'elles soit sélectionnée? –

Questions connexes