2009-04-29 10 views
1

Dieses bisschen HTML und Javascript funktioniert in IE6, FF2 und FF3. Ich kann keinen Grund finden, warum es nicht auch in IE7 funktionieren soll, aber this.selectedIndex gibt immer 0.Warum funktioniert this.selectedIndex nicht auf IE7 für einen <select> Tag?

** 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> 

** Edited die stilistischen Dinge ändern zu Menschen wider so stark. Die Warnung sagt immer noch, dass der selectedIndex 0 ist, nachdem ich das Auswahlfeld geändert habe. Dieser Code funktioniert in allen Browsern mit Ausnahme von I.E. 7

+0

Ist eine der, dass JS arbeiten? Ich habe noch nie gesehen, dass so viel JS in eine Onchange gesteckt hat. Normalerweise ist es anders angehängt oder in Funktion gebracht. –

+0

Erinnern Sie sich an http://thedailywtf.com/Articles/OnClick-Does-What!.aspx? – Greg

+0

weil 2 Zeilen Javascript ================================= 30 –

Antwort

3

Sie versuchen, aus der Optionsliste zu erhalten.

Verwenden Sie this.selectedIndex anstelle von this.options.selectedIndex.

Siehe auch dieses Beispiel für sauberere Nutzung: http://www.mredkj.com/tutorials/tutorial002.html

+0

Das hatte ich zuerst, das hat auch nicht funktioniert. Ich habe versucht, alle Arten von Dingen, einschließlich der Erhalt der Select-Tag explizit durch $ ('type_id') und this.selectedIndex anstelle von this.options.selectedIndex –

+0

Interessant. Das sollte definitiv funktionieren. Also, wenn Sie einfach verwenden: onchange = "alert (this.selectedIndex);" Sie erhalten nicht das richtige Ergebnis? Ich habe IE7 nicht installiert, aber IE8 und der IE7-Kompatibilitätsmodus zeigen das richtige Ergebnis. Vielleicht möchten Sie versuchen, Prototype zu deaktivieren, um zu sehen, ob das störend ist. –

+0

Probieren Sie die Beispielseite, mit der ich in IE7 in VPC verbunden war, und es funktionierte dort. Beachten Sie, dass ihre Methode document.getElementById() verwendet. –

2

Ich weiß, das ist alt, aber ich kann nicht helfen, es hier unaswered sehen. Ich denke, das Problem hier ist, dass Sie $ ('type_id') verwenden, was ein Element in jquery (glaube ich) zurückgibt. Um auf das eigentliche HTML-Element zuzugreifen, müssen Sie $ ('type_id') [0] oder etwas ähnliches verwenden. Ich denke, wenn Sie document.getElementById ('type_id') verwenden, sollte es funktionieren.

Edit: Veränderte Antwort Benxamin Kommentar darüber nachzudenken, wie das $ dom Element zuzugreifen ('type_id') [0]

+0

Ich wünschte, ich hätte noch den Code, um dies sicher zu testen, aber ich glaube, das ist die richtige Antwort. –

+0

Ja, das ist richtig. Um auf das erste Element des jQuery-Objekts zuzugreifen, verwenden Sie var el = $ ('# type_id') [0] und das HTML-DOM-Element wird zurückgegeben, sodass Sie el.options [el.selectedIndex] .value verwenden können. – Benxamin

Verwandte Themen