Avatar billede wolfgang Praktikant
26. oktober 2005 - 14:49 Der er 23 kommentarer og
1 løsning

1 form 2 actions

I samme form, vil jeg gerne have mulighed for at sende data to forskellige steder hen.

Hvordan styres disse 2 actions?

Håber at I kan hjælpe.

MVH
Garnet
Avatar billede softspot Forsker
26. oktober 2005 - 16:04 #1
post til en iframe og derefter til siden selv...
Avatar billede softspot Forsker
26. oktober 2005 - 16:05 #2
...hvis altså du mener at data skal sende til 2 forskellige sider på serveren.
Avatar billede wolfgang Praktikant
26. oktober 2005 - 17:41 #3
Vil du ikke give et eksempel på dette?
Avatar billede softspot Forsker
26. oktober 2005 - 18:34 #4
Så skulle det være noget i stil med dette:

<html>
<head>
<title></title>
<script type="text/javascript">
  function doDubblePost(obj) {
    if(obj) {
      obj.form.submit();
      obj.form.target = "";
      obj.form.submit();
    }
  }
</script>
</head>
<body>
<form method="post" target="post1">
  <input type="text" name="data" value="test"><br>
  <input type="submit" value="send data">
  <iframe name="post1" style="display:none"></iframe>
</form>
</body>
</html>
Avatar billede olebole Juniormester
27. oktober 2005 - 01:41 #5
<ole>

softspot >> Så må man håbe, tingene når at afvikle i iframe'en, inden du skifter hele dokumentet med den anden submit  ;o)

wolfgang >> Du må nok forklare noget mere om, hvad du gerne ville lave  :)

/mvh
</bole>
Avatar billede softspot Forsker
27. oktober 2005 - 01:49 #6
Det gør den nok ikke, men så kan man vel bare gøre sådan her...

<html>
<head>
<title></title>
<script type="text/javascript">
  function submitSelf(frmNo) {
    var frm = document.forms[frmNo];   
    if(frm) {
      frm.target = "";
      frm.submit();
    }
  }
  function doDubblePost(obj) {
    if(obj) {
      obj.form.submit();
      setTimeout("submitSelf(0)", 150);
    }
  }
</script>
</head>
<body>
<form method="post" target="post1">
  <input type="text" name="data" value="test"><br>
  <input type="submit" value="send data">
  <iframe name="post1" style="display:none"></iframe>
</form>
</body>
</html>
Avatar billede softspot Forsker
27. oktober 2005 - 01:54 #7
...i øvrigt skal funktionen nok kaldes før den trigger ;-)

<html>
<head>
<title></title>
<script type="text/javascript">
  function submitSelf(frmNo) {
    var frm = document.forms[frmNo];   
    if(frm) {
      frm.target = "";
      frm.submit();
    }
  }
  function doDubblePost(obj) {
    if(obj) {
      obj.form.submit();
      setTimeout("submitSelf(0)", 150);
    }
  }
</script>
</head>
<body>
<form method="post" target="post1">
  <input type="text" name="data" value="test"><br>
  <input type="button" value="send data" onclick="doDubblePost(this)">
  <iframe name="post1" style="display:none"></iframe>
</form>
</body>
</html>
Avatar billede wolfgang Praktikant
27. oktober 2005 - 09:17 #8
Beklager den manglende forklaring...

Det drejer sig om, at jeg har en form med ca. 13 felter.
Hidtil har det være fint med den alm. submit funktion, men nu har jeg også brug for at poste formens til en alternativ side (Preview af formens indhold.) Previewet består af en PDF-fil, genereret ud fra formens indhold.

Her er den nuværende koden, til submit af min form:
<img src="_Images/bt_forsaet_0.gif" alt="Fors&aelig;t" width="60" height="21" style="cursor:hand;" onClick="if(Validate(document.frm));document.frm.submit();"/>

Håber det bringer lys over udfordringen.
Avatar billede wolfgang Praktikant
27. oktober 2005 - 12:55 #9
-> Softspot
Jeg beklager meget, men jeg kan simpelthen ikke se mig ud af dit forslag.

Jeg har en submit-knap og jeg vil gerne kunne styre/sende til 2 statiske "actions".
Det er dog det samme form indhold, der skal postes.
Avatar billede softspot Forsker
27. oktober 2005 - 13:04 #10
Fair nok. Jeg har herunder forsøgt at indsætte dit submit-link, så det aktiverer den kode jeg har foreslået:

<html>
<head>
<title></title>
<script type="text/javascript">
  function Validate(f) {
    // koden er udeladt her for den har du nok allerede op plads... :)
  }
  function submitSelf(frmNo) {
    var frm = document.forms[frmNo];   
    if(frm) {
      frm.target = "";
      frm.submit();
    }
  }
  function doDubblePost(obj) {
    if(obj) {
      obj.form.submit();
      setTimeout("submitSelf(0)", 150);
    }
  }
</script>
</head>
<body>
  <form name="frm" method="post" target="post1">
    <input type="text" name="data" value="test"><br>
  </form>
  <img src="_Images/bt_forsaet_0.gif" alt="Fors&aelig;t" width="60" height="21" style="cursor:hand;" onClick="if(Validate(document.forms["frm"]));doDubbleSubmit();"/>


  <iframe name="post1" style="display:none"></iframe>

</body>
</html>
Avatar billede softspot Forsker
27. oktober 2005 - 13:06 #11
Funktionen doDubbleSubmit sender først data til en side via den der hedder post1 og derefter sætter den en timer igang, som efter 150 ms, sender data til den side som form-elementets action peger på (i dette tilfælde altså siden selv).
Avatar billede wolfgang Praktikant
27. oktober 2005 - 13:21 #12
Hov... Nu forstå jeg bedre forviringen - Jeg har vist ikke forklaret mig godt nok :(

Her min tanke:
Min side har en form og dertil to "submit-knapper".
Hvis jeg klikker på knap #1 er min action="actionside.asp?id=1". Hvis jeg klikker på knap #2 er min action="lavPDF.asp?id=1"

- Dvs. Det skal ikke gøres samtidig.
Avatar billede softspot Forsker
27. oktober 2005 - 13:25 #13
Ahaa! :)

Kunne det så være noget i stil med dette (kan laves pænere, men tag princippet):

<form method="post">
  <!-- andre felter -->
  <input type="submit" value="send" onclick="this.form.action='actionside.asp?id=1'">
  <input type="submit" value="send" onclick="this.form.action='lavPDF.asp?id=1'">
</form>
Avatar billede wolfgang Praktikant
27. oktober 2005 - 13:26 #14
Hvordan kobles det sammen med min eksisterende onClick="if(Validate(document.frm));document.frm.submit();" ?
Avatar billede softspot Forsker
27. oktober 2005 - 13:28 #15
Forudsat at din Validate-funktion returnerer false hvis formularen ikke er valid:

<form method="post">
  <!-- andre felter -->
  <input type="submit" value="send" onclick="if(Validate(document.frm))this.form.action='actionside.asp?id=1' else return false;">
  <input type="submit" value="send" onclick="if(Validate(document.frm)) this.form.action='lavPDF.asp?id=1' else return false;">
</form>
Avatar billede wolfgang Praktikant
27. oktober 2005 - 13:32 #16
Det vil jeg teste asap.
Avatar billede wolfgang Praktikant
27. oktober 2005 - 14:51 #17
Min submitknap er jo et billede:
<img src="_Images/bt_forsaet_0.gif" alt="Fors&aelig;t" width="60" height="21" style="cursor:hand;" onClick="if(Validate(document.frm));document.frm.submit();"/>

Din function skal vel kædes sammen mit eksisterende event:
onClick="if(Validate(document.frm));document.frm.submit();"
Avatar billede softspot Forsker
27. oktober 2005 - 14:56 #18
Ja, det er korrekt. Det havde jeg ikke lige fået med... men det kunne du så selv gennemskue... :)

Alternativt kan du benytte <input type="image"...> der fungerer nogenlunde som en <input type="submit"...> bare med et billede på.
Avatar billede wolfgang Praktikant
27. oktober 2005 - 15:59 #19
Mjallow,
Så har jeg muligvis fundet en løsning. Den melder dog om en scriptfejl.
Tegnet ';' var ventet.

<input type="submit" style="cursor:hand; width:60; height:21;border:0px; background-image:url(_Images/bt_PDF_0.gif); background-repeat:no-repeat;" name="login" value="&nbsp;" onclick="if(Validate(document.frm))this.form.action='actionside.asp?id=1' else return false;">

Uddrag af valideringsscript:
function Validate(frm)
  {
 
    if((frm.DataField_11.value==0))
      {       
    alert('Du skal angive sted for kurset!');
    frm.DataField_11.focus();
    return false;    
      }           
    if((frm.DataField_11.value.length>255))
      {       
    alert('Du bedes venligst begrænse dit indhold, til maksimalt 255 tegn');
    frm.DataField_11.focus();
    return false;    
      }               

   
      return true;
    }
Avatar billede softspot Forsker
27. oktober 2005 - 16:04 #20
Det er nok efter 'actionside.asp?id=1'

<input type="submit" style="cursor:hand; width:60; height:21;border:0px; background-image:url(_Images/bt_PDF_0.gif); background-repeat:no-repeat;" name="login" value="&nbsp;" onclick="if(Validate(document.frm))this.form.action='actionside.asp?id=1'; else return false;">

men det jeg mente med at bruge en <input type="image"...> var nu sådan her:

<input type="image" style="cursor:hand; width:60; height:21;border:0px;" name="login" src="_Images/bt_PDF_0.gif" value="&nbsp;" onclick="if(Validate(document.frm))this.form.action='actionside.asp?id=1'; else return false;">
Avatar billede roenving Novice
27. oktober 2005 - 16:14 #21
Du skal fjerne else-tingen eller sætte funktionen efter if-sætningen i tuborger !-)

-- specielt i inputs er det nødvendigt, da formen ellers submittes:

onclick="if(Validate(document.frm)){this.form.action='actionside.asp?id=1';}else{return false;}"
Avatar billede wolfgang Praktikant
27. oktober 2005 - 16:31 #22
Wow... Så spiller det max!
- Mange tak.

Vil I begge ikke oprette en svar, så jeg kan fordele points.
Avatar billede softspot Forsker
27. oktober 2005 - 17:19 #23
Jo da... - velbekomme :)
Avatar billede softspot Forsker
03. november 2005 - 09:42 #24
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