Avatar billede thundergod Nybegynder
22. februar 2005 - 15:27 Der er 1 løsning

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 ------------------------------
Avatar billede thundergod Nybegynder
06. juni 2007 - 11:32 #1
Spm. lukket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester