webForumDet fria alternativet

Select och innerHTML

3 svar · 426 visningar · startad av NoiseMaker

NoiseMakerMedlem sedan sep. 2001171 inlägg
#1

Hejsan!

Har lite trassel med att ändra innehållet i en <select></select> med hjälp av innerHTML.

Om jag har två variabler i javascriptet innehållande en eller flera <option></option> och vill kunna ändra värdelistans innehåll mellan dessa två varibalers värden, visst borde det gå med hjälp av innerHTML (lite ajax-tänk).

Mitt problem är att av "<option value=1>nr 1</option>" så sätts bara "nr 1</option>" in från variabeln vilket såklart resulterar i att listan pajjar helt.

Hur laddar man enklast en select-värdelista med "dynamisk" data UTAN att ladda om hela sidan? Några tips?

KoplikMedlem sedan juli 20011 129 inlägg
#2

Jag vet inte hurvida det fungerar med innerHTML eller outerHTML. Men själv har jag precis jobbat lite med att ha dynamiska dropdown-listor och jag gjorde så att jag tömde listan vid varje förändring och sedan byggde upp den igen.
Det är inte den bästa lösningen, men den verkar fungera.

  function emptyList(list)
  {
    theSel = document.getElementById(list)
    var selIndex = theSel.selectedIndex;
    for(i=theSel.length-1; i>=0; i--)
    {
      theSel.options[i] = null;
    }
    if (theSel.length > 0) {
      theSel.selectedIndex = selIndex == 0 ? 0 : selIndex - 1;
    }
  }

  function addOptionsToList(list, option_Text, option_Value){
    var foundOption = false;
    var elSelect = document.getElementById(list);

    for(i=0;i<elSelect.length;i++){
      if(elSelect.options[i].value == option_Value){
        foundOption = true;
        break;
      }
    }

    if(!foundOption){ //Valet finns inte sedan tidigare i rullisten, därmed så läggs den till
      var elOpt = document.createElement("option");
      elOpt.text = option_Text;
      elOpt.value = option_Value;

      try{ //Doesn't work in IE
        elSelect.add(elOpt, null);
      } catch(e) { //IE Only
        elSelect.add(elOpt);
      }
    }
  }

  function populateListFilter(list) {
    //Loopar igenom alla värden som ska in i listan, mitt exempel bestod av en XML-hämtning, därmed tog jag bort det.
   for(i=0;i<minArray.length;i++)
     addOptionsToList(list, minArray[i], minArray[i]);
  }

Som sagt, om någon annan inte levererar en bättre lösning så kanske funktionerna kan vara till någon hjälp.

list <- är alltså ID på den <select> jag vill tömma eller populera

colioneMedlem sedan juni 20014 421 inlägg
#3

Kolla på denna lösning, använder DOM-scripting istället för innerHTML. Kan säta in och ta bort vartsomhelst.
http://www.mredkj.com/tutorials/tutorial005.html

NoiseMakerMedlem sedan sep. 2001171 inlägg
#4

Kanon! DOM-varienten var precis vad jag var ute efter!
Tack båda två

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)