[JavaScript] Select waarde aan de hand van value?

Pagina: 1
Acties:

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Hoi, ik zal het simpel en duidelijk houden :) Ik heb het volgende:

HTML:
1
2
3
4
5
<select name="myselect">
    <option value="NL">Nederland</option>
    <option value="BE">België</option>
    <option value="DE">Duitsland</option>
</select>


Deze code staat in een formulier dat gesubmit wordt. Hierna controleer ik met behulp van PHP of er een aantal input velden wel kloppen (regular expressions). Is die niet het geval, dan komt men weer op de pagina met het formulier en worden de oude waarden hersteld. Voor input velden is dit met PHP niet zo moeilijk, selects zijn wat lastiger.

Ik kan voor elke option regel iets van van 'if myselect = value echo selected' maar aangezien de select zo'n beetje alle landen bevat is dat niet echt een nette oplossing.

Nou zat ik meer te denken aan iets met javascript, welke gewoon door middel van 'selectedIndex' de juiste waarde insteld met selected aan de hand van de value (de value is immers verstuurd en krijg ik weer mee als POST waarde). Probleem is, ik heb geen idee hoe dat te doen. Google (en de W3 school's) kunnen mij ook niet veel vertellen.

Iemand enig idee hoe dit netjes op te lossen is? Alternatieven zijn altijd welkom natuurlijk!

Alvast bedankt!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Een alternatief (en wat ik zelf zou doen) is gewoon serverside alles in een array zetten en dan voor elk element in die array een option-element aanmaken. Dan krijg je zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
$selectedValue = "NL";
$countries = array(
  "NL" => "Nederland",
  "BE" => "Belgie",
  "DE" => "Duitsland"
);
foreach($countries as $value => $name) {
  $selected = ($value == $selectedValue) ? " selected" : "";
  echo "<option value=\"$value\"$selected>$name</option>";
}


edit: en diezelfde array kun je natuurlijk ook weer gebruiken om te checken of de gebruiker een geldige keuze heeft gemaakt :)

[ Voor 12% gewijzigd door user109731 op 15-09-2006 12:06 ]


  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 09-01 09:09
Dit kan natuurlijk op veel manieren, maar dit is een voorbeeld. Vanaf de eerste pagina geef je eerst de geselecteerde index mee, bijvoorbeeld in een hidden field
dus:

<select name="myselect">

krijgt een onChange erbij:
code:
1
<select name="myselect" onChange="document.forms[0].hiddenfield.value = document.forms[0].myselect[selectedIndex];">

Als het formulier gepost is weet je door het ophalen van de hidden value dus welke index geselecteerd was. Dan doe je in de body onLoad:

code:
1
<body onLoad="document.forms[0].myselect.selectedIndex = {$_POST['hiddenfield']}">

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
UniCache2 schreef op vrijdag 15 september 2006 @ 11:57:
Dit kan natuurlijk op veel manieren, maar dit is een voorbeeld. Vanaf de eerste pagina geef je eerst de geselecteerde index mee, bijvoorbeeld in een hidden field
dus:

<select name="myselect">

krijgt een onChange erbij:
code:
1
<select name="myselect" onChange="document.forms[0].hiddenfield.value = document.forms[0].myselect[selectedIndex];">

Als het formulier gepost is weet je door het ophalen van de hidden value dus welke index geselecteerd was. Dan doe je in de body onLoad:

code:
1
<body onLoad="document.forms[0].myselect.selectedIndex = {$_POST['hiddenfield']}">
Perfect! Daar was ik naar op zoek. Het idee van Grote Prutser zat ik ook al mee te spelen, maar aangezien ik veel selects heb met verschillende waardes is dat nog niet erg efficient.

De manier UniCache2 was ik naar op zoek. Ik probeerde steeds achteraf de selectedIndex er uit te vissen somehow, maar dit werkt natuurlijk veel makkelijker.

Bedankt!