Toon posts:

[JS] formveld als var in functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een algemene functie maken om dropdown-elementen te vullen. Bij het oproepen van de functie moet je dus ingeven welk veld je wilt vullen. Het script dat ik heb is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function fillDropdown(data, veld){
        for(var i = veld.length ; i > 0 ; i--){
                veld.options[0] = null;
        }
        for(var i = 0; i < data.length ; i+=2){
                var optionName = new Option(data[i+1], data[i], false, false);
                var length = veld.length;
                veld.options[length] = optionName;
        }

        if(navigator.userAgent.indexOf('Mac') == -1){
                veld.selectedIndex = -1;
        }
        else{
                veld.options[0].selected = true;
        }
}


Ik roep nu de code op met:
code:
1
fillDropdown(eval(arr_'+ options[selectedIndex].value), 'document.form.provincie')


Vervolgens krijg ik deze error:
'options' is leeg of geen object (regel 4).

Nu denk ik dat hij de variabele veld niet goed ervoor zet en gewoon 'veld' laat staan ipv er 'document.form.provincie' van te maken.

Alvast bedankt!

PS. het veld document.form.provincie bestaat wél...

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Je stuurt het select object mee als string, dat gaat niet werken. Dit:
code:
1
fillDropdown(eval(arr_'+ options[selectedIndex].value), document.forms['form'].elements['provincie'])

zal waarschijnlijk al beter werken.

De eerste parameter is een array (gok ik; afgaande op de naam). Omdat eval() een beetje vies is, kan je misschien beter een multi-dimensionale array (array met arrays) maken en afhankelijk van de keuze een element pakken.
Een andere optie is (niet getest):
code:
1
fillDropdown(window['arr_'+ options[selectedIndex].value], document.forms['form'].elements['provincie'])

Today's subliminal thought is:


Verwijderd

Topicstarter
Bedankt... dit werkt inderdaad een stuk beter :D!