Avatar billede jespersahner Nybegynder
19. februar 2004 - 22:54 Der er 13 kommentarer og
1 løsning

Dynamisk angivelse af ACTION= i forb. med <FORM>

Jeg har brug for at dynamisk at kunne angive ACTION= i forb. m. <FORM>. Jeg forestiller mig, at ACTION vælges i en select-box og derefter bruges i <FORM>-statement'et. Altså i forbindelse med:
<FORM NAME="SAS" METHOD=GET ACTION="http://acpu/sas-cgi/broker">

Jeg har forsøgt med:
<SELECT NAME="ACTION" onchange="document.SAS.action=this.value">
<OPTION VALUE="http://bcpu/sas-cgi/broker">BCPU</OPTION>
<OPTION VALUE="http://ccpu/sas-cgi/broker">CCPU</OPTION>
<OPTION VALUE="http://dcpu/sas-cgi/broker">DCPU</OPTION>
</SELECT>

Dette virker fint men kræver, at onchange "udløses". Konkret vil ACTION="http://acpu/sas-cgi/broker" blive valgt, hvis ikke select-box'en røres. Man er derfor nødt til at aktivere select-box'en for at vælge et alternativ til ACTION-parameteren.

Er der ikke en fiksere måde, hvis man altid vil bruge indholdet af select-box'en?
Avatar billede erikjacobsen Ekspert
19. februar 2004 - 23:10 #1
Du kan lave tilordningen i en <form ... onsubmit="....">
Avatar billede jespersahner Nybegynder
19. februar 2004 - 23:19 #2
Kan du være mere specifik, jeg kender ikke det store til HTML?
Avatar billede thesurfer Nybegynder
19. februar 2004 - 23:22 #3
Eksempel:

<script type="text/JavaScript">
function skift(frm)
{
frm.action = frm.selact.value;
return true;
}
</script>

<form onsubmit="return skift(this)">
<select name="selact">
<option value="http://bcpu/sas-cgi/broker">bcpu</option>
<option value="http://ccpu/sas-cgi/broker">ccpu</option>
<option value="http://dcpu/sas-cgi/broker">dcpu</option>
</select>
<input type="submit" value="Send">
</form>
Avatar billede thesurfer Nybegynder
19. februar 2004 - 23:27 #4
Eller med:
<select name="selact" onchange="this.form.submit()">

Og lige en rettelse:
<form action="http://acpu/sas-cgi/broker" onsubmit="return skift(this)" method="get">
Avatar billede jespersahner Nybegynder
19. februar 2004 - 23:45 #5
Det virker nu næsten, skal blot lige have styr på, hvordan jeg udfører flere funktionskald i forb. med onSubmit. Sagen er, at jeg har nogen validering, som jeg også skal have udført. Jeg prøver noget med onSubmit="return validate();return skift(this)", men det er vist ikke den rigtige syntaks.
Avatar billede thesurfer Nybegynder
19. februar 2004 - 23:47 #6
Smid lige alle dine funktioner her ind.. så er det nemmere at finde en løsning..
Avatar billede jespersahner Nybegynder
19. februar 2004 - 23:49 #7
<SCRIPT LANGUAGE="JavaScript1.2">
function validate ()
{
  if (document.forms.SAS.PERR.value == "" &
      document.forms.SAS.PERF.value == "" &
      document.forms.SAS.PERB.value == "") {
      alert ("Realiseret, Forventet eller Budget skal udfyldes!")
      return false;
  }
  return true;
}
function skift(frm)
{
frm.action = frm.ACTION.value;
return true;
}
</SCRIPT>
Avatar billede thesurfer Nybegynder
19. februar 2004 - 23:53 #8
Du har fundet ud af at jeg har ændre selectboxens navn fra "action" og til "selact", ik? :)
Det må ikke hedde "action", da det giver problemer.. der er jo noget der hedder formnavn.action..
Avatar billede jespersahner Nybegynder
19. februar 2004 - 23:58 #9
Ja, sorry. Jeg har brugt navnet "ACTION" i stedet for "selact", det ser ud til at virke fint, men hvis det i øvrigt giver problemer, ændrer jeg tilbage til "selact" :-)
Avatar billede thesurfer Nybegynder
20. februar 2004 - 00:05 #10
Testet og virker:

<script type="text/JavaScript">
function skift(frm)
{

if ( (frm.PERR.value == "") || (frm.PERF.value == "") || (frm.PERB.value == "") ) {
  alert ("Realiseret, Forventet eller Budget skal udfyldes!");
  return false;
} else {
  frm.action = frm.selact.value;
  return true;
}

}
</script>

<form name="SAS" onsubmit="return skift(this)" action="http://acpu/sas-cgi/broker"  method="get">
<select name="selact" onchange="this.form.submit()">
<option value="http://bcpu/sas-cgi/broker">bcpu</option>
<option value="http://ccpu/sas-cgi/broker">ccpu</option>
<option value="http://dcpu/sas-cgi/broker">dcpu</option>
</select>
<br><input type="text" name="PERR" value="1">
<br><input type="text" name="PERF" value="2">
<br><input type="text" name="PERB" value="3">
</form>

Hvis du bruger en submit-knap, indsæt følgende lige før </form>:
<br><input type="submit" value="send">

og fjern:  onchange="this.form.submit()"
Avatar billede jespersahner Nybegynder
20. februar 2004 - 00:13 #11
Ok, du pakker altså mine 2 funktioner sammen i een funktion. Men hvorfor virker det ikke blot at adskille de 2 funktionskald af ';', altså onSubmit="return validate(); return skift(this);"? (jeg har prøvet, og det er kun den første funktion, der udføres (gælder også hvis jeg bytter om på funktionskaldene)). Det er vel den officielle syntaks, når man anvender multiple funktionskald?
Avatar billede thesurfer Nybegynder
20. februar 2004 - 00:18 #12
Ja, men den kan vel kun returnere 1 funktion/handling.. du sender jo en "return true" tilbage allerede i første kald.. så den submitter vel med det samme..
Avatar billede jespersahner Nybegynder
20. februar 2004 - 00:34 #13
Det lyder ædrueligt :-) Tak for hjælpen!
Avatar billede thesurfer Nybegynder
20. februar 2004 - 00:35 #14
Så smider jeg et svar :)
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