Avatar billede jytte Nybegynder
16. september 2004 - 13:27 Der er 10 kommentarer og
2 løsninger

drop down alert

Hvordan laver man følgende:

Der er tre drop-downs (Kaspers alder,Jespers alder og Jonathans alder) alle med tallene 25,28,30 (og et tomt valg ved ingen valgt)

Man skal altså vælge hvilken alder de tre søskende har.

Men hvis man har valgt Kaspers alder til 25 skal der, hvis man også vælger Jespers alder til 25, komme en alert der siger '15 er allerede valgt som en af de andres alder'

Det skal altså være sådan at man ikke kan submitte hvis der er valgt 2 ens aldre (man må dog godt have tomt valg flere steder)
Avatar billede bernhof Nybegynder
16. september 2004 - 13:46 #1
<script language="javascript">
  function validate(frm)
    {
    if(frm.Kasper.value == frm.Jesper.value || frm.Kasper.value == frm.Jonathan.value)
      {
      alert(frm.Kasper.value + " er allerede valgt.");
      return false;
      }

    if(frm.Jesper.value == frm.Jonathan.value)
      {
      alert(frm.Jesper.value + " er allerede valgt.");
      return false;
      }

    return true;
    }
</script>

<form action="side.htm" method="post" onsubmit="return validate(this)">

<select name="Kasper">
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

<select name="Jesper">
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

<select name="Jonathan">
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

</form>

Se om det fungerer.
Avatar billede jytte Nybegynder
16. september 2004 - 14:15 #2
Jeg fik vist ikke formuleret mig helt korrekt.
Det jeg gerne vil have er

At det er umuligt at vælge 2 ens værdier

alerten skal altså komme præcis når man vælge 25 anden gang og ikke først når man submitter.

udover at du mangler en submit-knap virker din kode ved submit, men det er ikke lige det jeg mangler.
Avatar billede bernhof Nybegynder
16. september 2004 - 14:38 #3
Prøv:

<script language="javascript">
  function validate()
    {
    if(frmAlder.Kasper.value == frmAlder.Jesper.value || frmAlder.Kasper.value == frmAlder.Jonathan.value)
      {
      alert(frmAlder.Kasper.value + " er allerede valgt.");
      return false;
      }

    if(frmAlder.Jesper.value == frmAlder.Jonathan.value)
      {
      alert(frmAlder.Jesper.value + " er allerede valgt.");
      return false;
      }

    return true;
    }
</script>

<form name="frmAlder">

<select name="Kasper" onchange="validate()">
  <option value=""></option>
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

<select name="Jesper" onchange="validate()">
  <option value=""></option>
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

<select name="Jonathan" onchange="validate()">
  <option value=""></option>
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

</form>
Avatar billede grunken Nybegynder
16. september 2004 - 14:42 #4
- og for eksemplets skyld (frit kopieret fra mikbj - derfor heller ingen submitknap) ;o)

<script type="text/javascript">

var e

function chekden(s){
  for(i=0;i<e.length;i++){
  if(e[i]!=s&&s.value==e[i].value&&s.value!="alder"){
    alert("du kan da ikke v\346lge samme alder flere gange")
    s.selectedIndex=0;
    break;
  }
  }
}

window.onload = function(){
  e = document.forms[0].elements
  for(i=0;i<e.length;i++)if(e[i].className=="sel")e[i].onchange = function(){chekden(this)};
}
</script>

<form action="side.htm" method="post" onsubmit="return validate(this)">

<select name="Kasper" class="sel">
  <option value="Alder">Alder</option>
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

<select name="Jesper" class="sel">
  <option value="Alder">Alder</option>
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

<select name="Jonathan" class="sel">
  <option value="Alder">Alder</option>
  <option value="25">25</option>
  <option value="28">28</option>
  <option value="30">30</option>
</select>

</form>
Avatar billede bernhof Nybegynder
16. september 2004 - 14:47 #5
grunken er ret kompetent, så benyt hans script, hvis det fungerer :)
Avatar billede grunken Nybegynder
16. september 2004 - 14:53 #6
mikbj - dit burde virke mindst lige så godt, jeg skitserede blot en anden måde at gøre det på ;o)

- så i fohold til det jytte spørger om, må mit betragtes som overkill ;o) - og dit som primært valg!
Avatar billede jytte Nybegynder
16. september 2004 - 15:27 #7
I vist begge to i det beskedne hjørne :-)

Jeg er nu ret glad for Grunkens script for det jeg skal bruge det til er faktisk er endnu mere generelt.

Lige to spørgsmål til din kode Grunken:

Jeg troede class var noget man brugte til stylesheets ? kan man ikke bruge id i stedet ?

Behøver de tre selects at have samme classname ? (udover at det simplificerer koden)

Din onsubmit er den kun kopieret fra mikbj eller har den nogen funktion ?
Avatar billede grunken Nybegynder
16. september 2004 - 16:44 #8
;o)

class er nemmeligt noget man bruger til stylesheets - men taget i betragtning af at de fleste vælger at have samme layout på flere selects i samme form, er det nu også en meget smart måde at lavet eventtuelt check på ;o)

Og i en form er det jo heller ikke så pokkers tit at man bryder sig om at flere elementer har samme navn ;o)


Jow - du kan sagtens vælge at bruge id'ér til dine selects ud fra min skitse, men det kræver så at du ud fra mit eksempel ville skulle gøre hver enkel id forskellig (påkrævet af w3 standarden)

eks.
id="HansChk"
id="JesperChk"
etc.

og så ændre lidt i følgende linie:

for(i=0;i<e.length;i++)if(e[i].id.indexOf("Chk")>0)e[i].onchange = function(){chekden(this)};

Ovenstående sørger jo også automatisk for at tilføje en onsubmit, til de selects der skal checkes ;o)

-
(det jeg havde kopieret fra mikbj var formen ;o))


- hvis det ikke er nok uddyber jeg selvfølgelig mere ;o)
Avatar billede jytte Nybegynder
16. september 2004 - 19:15 #9
To opklarende spørgsmål:

Mener du ikke "automatisk for at tilføje en onchange" i stedet for "automatisk tilføje en onsubmit" ?

kan din funktion uden navn erstattes af

function myfunction(){
  e = document.forms[0].elements
  for(i=0;i<e.length;i++){
    if(e[i].className=="sel") {
      e[i].onchange = myfunction()
      chekden(this);
    }
  }
}

<body onload="myfunction()">

eller er der noget jeg har misforstået
Avatar billede grunken Nybegynder
17. september 2004 - 14:12 #10
1. Klar staveklamamse fra min side - selvfølgelig mener jeg onchange ;o)

2. der er noget du har misforstået

function(){chekden(this);} - er et nødvendigt onde når man til føjer funktioner til events ;o)

3. prøv at forklare hvad du vil med ovenstående

hvis meningen er at du både vil afvikle chekden(this) og myfynction, så skal linien se sådan ud :

e[i].onchange = function{myfunction();chekden(this);}

Hvis det er noget andet du vil, så skal eventhandlers tilføjes på en anden måde ;o)
Avatar billede jytte Nybegynder
17. september 2004 - 15:26 #11
Jeg tror næsten jeg forstår det nu.

window.onload = function(){ ...

er en virkelig smart måde hvor man kan tilføje funktioner til events

Nu når jeg tænker over det vil det kunne simplificer rigtig mange af mine asp-sider hvor jeg generere onloads i bodydelen fordi jeg ikke vidste at der vha. ovenstående kan flytte alt mit javascript væk fra body-delen.

Så jeg siger mange tak for dit inspirende script (som jeg allerede har brugt)

Læg et svar så fordeler jeg pointene
Avatar billede grunken Nybegynder
24. september 2004 - 14:38 #12
Bedre sent end aldrig ;o)

- godt at du fik ny lærdom ;o)
- og "window.onload=" er ganske smart, og give en muligheden for at komme nærmere en gang HTML kode helt ryddet for javascript events :o)
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