Problem med dropdown boks' indhold i Firefox+Safari+Netscape
Mit problem ligner lidt: http://eksperten.dk/spm/494132 men ikke helt, så læs bare videre.Jeg har en html side (i jsp) der bl.a. indeholder to dropdown bokse.
Når man vælger noget i den første drop down boks, skifter indholdet i den anden dropdown boks.
Dette virker fint i Internet Explorer 6.0 samt Netscape 6.0+.
Problemet er at Firefox, Safari og de andre Mac drenge ikke helt spiller efter Microsoft's pibe. (Forståeligt nok).
I min kode har jeg en function i javascript der bliver kaldt når inholdet af dropdown boks 1 bliver ændret.
onchange="changeMaterialSizes('formName', 'type', 'size');"
Indholdet af denne metode:
1. Tjekker først browsertypen, da IE og Netscape er lidt forskellige.
2. Tømmer dropdown boks 2 for elementer.
3. Fylder dropdown boks 2 op med nye elementer der passer til dropdown boks 1's valgte element.
4. Sætter selectedIndex på dropdown boksen til den første i rækken.
Er der nogen der har en bedre idé til hvordan det kan gøres?
Det er muligt at koden slet ikke kan bruges, og skal skrives om. I såfald modtager jeg gerne kodeeksempler som svar.
Jeg har indsat koden fra changeMaterialSizes(..) herunder.
----------- Kode start -----------------------------
function changeMaterialSizes(formName, typeSelectName, sizeSelectName, selectedViewSize)
{
var ns6 = navigator.appName == "Netscape" && parseInt(navigator.appVersion) == 5 ? true : false;
var ie5 = navigator.appName == "Microsoft Internet Explorer" && ((navigator.appVersion.indexOf("MSIE 5") != -1) || (navigator.appVersion.indexOf("MSIE 6") != -1)) ? true : false;
var selectedIdx = document.forms[formName].elements[typeSelectName].selectedIndex;
var type = document.forms[formName].elements[typeSelectName].options[selectedIdx].value;
while (document.forms[formName].elements[sizeSelectName].length > 0)
{
if (ns6)
{
var selLength = document.forms[formName].elements[sizeSelectName].length;
document.forms[formName].elements[sizeSelectName].options[selLength-1] = null;
}
else if(ie5)
{
document.forms[formName].elements[sizeSelectName].remove(0);
}
else
{
// Case: Safari,Firefox, etc.
}
}
var selIdx = 0;
var offset = 0;
for (i=0; i < dropDownBox2Contents.length; i++)
{
if (dropDownBox2Contents[i] == type)
{
var newOption;
if (ns6)
{
var selLength = document.forms[formName].elements[sizeSelectName].length;
newOption = new Option(matSizeOptions[i], matSizeValues[i]);
if (matSizeValues[i] == selectedViewSize)
{
selIdx = i;
}
document.forms[formName].elements[sizeSelectName].options[selLength] = newOption
}
else if (ie5)
{
newOption = document.createElement("OPTION");
newOption.text = matSizeOptions[i];
newOption.value = matSizeValues[i];
if (matSizeValues[i] == selectedViewSize)
{
selIdx = i;
}
document.forms[formName].elements[sizeSelectName].add(newOption);
}
}
else
{
offset++;
}
}
if ((selIdx-offset) < 0)
{
document.forms[formName].elements[sizeSelectName].selectedIndex = 0;
}
else
{
document.forms[formName].elements[sizeSelectName].selectedIndex = (selIdx-offset);
}
}
----------- Kode slut ------------------------------