Avatar billede breon Nybegynder
31. august 2004 - 15:08 Der er 19 kommentarer og
2 løsninger

Validering af 2 x <select>

Jeg konstrueret følgende eksempel for at illustrere mit spørgsmål:

På side1.php har jeg to <select> bokse, hvor brugeren skal vælge nogle informationer. Når der klikkes på submit-knappen sendes man videre til side2.php, hvor de valgte informationer så vises.

Jeg vil så gerne kontrollere om der valgt noget i de to bokse, inden brugeren sendes videre til side2.php, og mit spørgsmål er derfor, på hvilken måde er det nemmest at gøre dette og kan det lade sig gøre uden at skulle forlade side1.php?

Jeg havde forestillet mig en løsning, hvor der vises en advarsel ud for den boks der evt. mangler at blive valgt. Jeg har en formodning om det skulle være realtiv let, men min hjerne kører tilsyneladende ikke i allerhøjeste gear idag.
Avatar billede hmortensen Nybegynder
31. august 2004 - 15:11 #1
Hvis du vil validere inden du sender data'en, kan du benytte javascript
Avatar billede breon Nybegynder
31. august 2004 - 15:12 #2
ja, men jeg havde egentlig håbet på en ren PHP løsning, da jeg ikke er så skrap til javascript.
Avatar billede fennec Nybegynder
31. august 2004 - 15:13 #3
Dette burde virke (ikke testet)

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function MyCheck()
{
  if(document.DinForm.DinSelect1.value != '' && document.DinForm.DinSelect2.value != '')
    return true;
  else
  {
    return false;
    alert('En besked...')
  }
}
//-->
</SCRIPT>
<form ... onSubmit="return MyCheck()">
Avatar billede fennec Nybegynder
31. august 2004 - 15:14 #4
Du kan ikke lave en php løsning uden at submitte siden....
Avatar billede breon Nybegynder
31. august 2004 - 15:24 #5
Nu har jeg placeret koden fra fennec i min header på side1.php (tilpasset til min form og select navne) og i min form står der så <form method="post" name="trin1" action="side2.php" onSubmit="return MyCheck()">.

Men der sker bare ikke noget, mangler jeg noget?
Avatar billede fennec Nybegynder
31. august 2004 - 15:30 #6
Havde lige bytte om på alert() og return. Ellers bliver alert'en ikke aktiveret :o)

alert('En besked...')
return false;
Avatar billede breon Nybegynder
31. august 2004 - 15:33 #7
nu får jeg godt nok en alert, men den kommer uanset om jeg har valgt noget eller ej.

Min select ser nogenlunde sådan ud:

<select style="width: 200px;" name="select1">
<option></option>
<option>valg 1</option>
<option>valg 2</option>
</select>
Avatar billede fennec Nybegynder
31. august 2004 - 15:36 #8
du skal jo have en value på option også. Den første skal selvfølgelig ikke have en.

<select style="width: 200px;" name="select1">
<option></option>
<option value="valg 1">valg 1</option>
<option value="valg 2">valg 2</option>
</select>
Avatar billede roenving Novice
31. august 2004 - 15:38 #9
Mon ikke også spørgsmålet skulle have været:

  if(document.DinForm.DinSelect1.selectedIndex == 0 || document.DinForm.DinSelect2.selectedIndex == 0)
Avatar billede roenving Novice
31. august 2004 - 15:46 #10
-- og så kan man jo ligesågodt udnytte at man kalder fra et form-element:

<script language="JavaScript" type="text/javascript">
<!--
function MyCheck(f){
  if(f.select1.selectedIndex < 1 || f.select2.selectedIndex < 1){
    alert('En besked...')
    return false;
  }else{
    return true;
  }
}
//-->
</script>
<form action="" onsubmit="return MyCheck(this)">
<select style="width: 200px;" name="select1">
<option>-- Vælg her --</option>
<option value="valg 1">valg 1</option>
<option value="valg 2">valg 2</option>
</select><br>
<select style="width: 200px;" name="select2">
<option>-- Vælg her --</option>
<option value="valg 1">valg 1</option>
<option value="valg 2">valg 2</option>
</select><br>
<input type="submit">
</form>
Avatar billede fennec Nybegynder
31. august 2004 - 15:47 #11
roenving >>

Jeg havde slet ikke tænk på, at man også kunne tjekke, om det er den første option der er valgt. Men if'en giver nu det omvendte resultat, så der skal lige byttes om på returnværdierne.

if(document.DinForm.DinSelect1.selectedIndex == 0 || document.DinForm.DinSelect2.selectedIndex == 0)
{
  alert('En besked...');
  return false;
}
else
  return true;
Avatar billede fennec Nybegynder
31. august 2004 - 15:47 #12
... du havde selv bytte om på det :o)
Avatar billede breon Nybegynder
31. august 2004 - 15:55 #13
Nu virker det, ikke helt som jeg oprindeligt havde tænkt mig, men det virker.

Er det muligt få vist en tekst ud for den manglende <select> istedet for en alert?
Avatar billede fennec Nybegynder
31. august 2004 - 16:04 #14
Så skal du have et span/div element ind også. Har lavet det med roenving eks.

<script language="JavaScript" type="text/javascript">
<!--
function MyCheck(f){
  if(f.select1.selectedIndex < 1){document.getElementById('span1').innerHTML = 'Der mangler data'}
  if(f.select2.selectedIndex < 1){document.getElementById('span2').innerHTML = 'Der mangler data'}
  if(f.select1.selectedIndex < 1 || f.select2.selectedIndex < 1){
    return false;
  }else{
    return true;
  }
}
//-->
</script>
<form action="" onsubmit="return MyCheck(this)">
<select style="width: 200px;" name="select1">
<option>-- Vælg her --</option>
<option value="valg 1">valg 1</option>
<option value="valg 2">valg 2</option>
</select><span id="span1"></span><br>
<select style="width: 200px;" name="select2">
<option>-- Vælg her --</option>
<option value="valg 1">valg 1</option>
<option value="valg 2">valg 2</option>
</select><span id="span2"></span><br>
<input type="submit">
</form>
Avatar billede breon Nybegynder
31. august 2004 - 16:10 #15
Yes!!! Det var lige sådan jeg havde tænkt mig. Tak for det fennec!

Smid et svar hvis du vil have point.
Avatar billede fennec Nybegynder
31. august 2004 - 16:12 #16
roenving skal vel også have lidt.....
Avatar billede roenving Novice
31. august 2004 - 16:13 #17
-- og så kan man da ligesågodt udnytte det nemmere retur-værk:

<script language="JavaScript" type="text/javascript">
<!--
function MyCheck(f){
  if(f.select1.selectedIndex < 1){document.getElementById('span1').innerHTML = 'Der mangler data'}
  if(f.select2.selectedIndex < 1){document.getElementById('span2').innerHTML = 'Der mangler data'}
  return !(f.select1.selectedIndex < 1 || f.select2.selectedIndex < 1);
}
//-->
</script>
Avatar billede breon Nybegynder
31. august 2004 - 16:14 #18
jo, jeg havde egentlig også tænkt mig at skrive hvsi du/I ville have point, men...

Vi venter lidt endnu..
Avatar billede breon Nybegynder
31. august 2004 - 16:16 #19
wow, roenving, du er jo slet ikke til at stoppe igen :-)

Endnu en gang tak for hjælpen til Jer begge, så fik jeg også lidt lært lidt om javascript i dag.
Avatar billede roenving Novice
31. august 2004 - 16:25 #20
Velbekomme '-)
Avatar billede roenving Novice
31. august 2004 - 16:41 #21
-- og tak for point ;~}
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