2009-04-29 7 views
1

Ce bit HTML et Javascript fonctionne dans IE6, FF2 et FF3. Je ne peux trouver aucune raison pour ne pas travailler dans IE7 aussi, mais this.selectedIndex retourne toujours 0.Pourquoi this.selectedIndex ne fonctionne pas sur IE7 pour un tag <select>?

** in javascript file 
function onTypeChange() 
{ 
    alert($('type_id').selectedIndex); 
    if ($('type_id').selectedIndex != 0) 
    { 
     Element.update('chosenType', this.options[this.selectedIndex].text);  
     Form.Element.enable('go_button'); 
    } else { 
     Element.update('chosenType', 'Selected Type'); 
     Form.Element.disable('go_button'); 
    } 
} 

** in html 
<select class="hosp_select_buttons selectbox" id="type_id" name="type[id]" 
     onchange="onTypeChange();"> 
<option value="">Please select</option> 
<option value="1594">Ambulatory Surgical Center</option> 
<option value="1595">Birthing Center</option> 
<option value="1596">Comprehensive Outpatient Rehabilitation Facilities</option> 
<option value="1597">Drug Abuse Treatment Program</option> 
<option value="1598">Mammography</option> 
<option value="1599">Narcotic Treatment Program</option> 
<option value="1600">Outpatient Physical Therapy</option> 
<option value="1601">Private Home Care Provider</option></select> 

** Sous la direction de changer les choses stylistiques les gens se sont opposés si fortement aussi. L'alerte indique toujours que selectedIndex est 0 après avoir modifié la zone de sélection. Ce code a, et fonctionne toujours dans tous les navigateurs autres que I.E. 7

+0

Est-ce que l'un des JS qui fonctionne? Je n'ai jamais vu autant de JS mettre dans un onchange. Habituellement, il est joint autrement ou mis dans une fonction. –

+0

Rappelez-vous de http://thedailywtf.com/Articles/OnClick-Does-What!.aspx? – Greg

+0

parce que 2 lignes de javascript == 30 lignes de code de validation de formulaire? –

Répondre

3

Vous essayez d'obtenir selectedIndex à partir de la liste d'options.

Utilisez this.selectedIndex au lieu de this.options.selectedIndex.

Voir aussi cet exemple pour une utilisation plus propre: http://www.mredkj.com/tutorials/tutorial002.html

+0

C'était ce que j'avais au début, ça ne marchait pas non plus. J'ai essayé toutes sortes de choses, y compris obtenir la balise select explicitement par $ ('type_id') et this.selectedIndex au lieu de this.options.selectedIndex –

+0

Intéressant. Cela devrait certainement fonctionner. Donc, si vous utilisez simplement: onchange = "alert (this.selectedIndex);" vous n'obtenez pas le bon résultat? Je n'ai pas IE7 installé, mais IE8 et le mode de compatibilité IE7 montrent le résultat correct. Vous pouvez essayer de désactiver Prototype pour voir si cela interfère. –

+0

Juste essayé la page d'exemple, j'ai lié à IE7 en VPC et cela a fonctionné là. Notez que leur méthode utilise document.getElementById(). –

2

Je sais que c'est vieux, mais je ne peux pas aider à le voir ici unaswered. Je pense que le problème ici est que vous utilisez $ ('type_id'), qui renvoie un élément dans jquery (je crois). Pour accéder à l'élément HTML actuel, vous devez utiliser $ ('type_id') [0] ou quelque chose comme ça. Je pense que si vous utilisez document.getElementById ('type_id') ça devrait marcher.

Edit: Changé réponse pour refléter le commentaire de Benxamin sur l'accès à l'élément dom $ ('type_id') [0]

+0

Je voudrais avoir encore le code pour tester cela à coup sûr mais je crois que c'est la bonne réponse. –

+0

Oui, c'est correct. Pour accéder au premier élément de l'objet jQuery, utilisez var el = $ ('# type_id') [0] et cela renverra l'élément HTML DOM, de sorte que vous puissiez utiliser el.options [el.selectedIndex] .value. – Benxamin

Questions connexes