Avatar billede jonas82 Nybegynder
23. november 2005 - 17:13 Der er 9 kommentarer og
1 løsning

Udvide en form ved klik på en knap

Jeg har lavet en simpel form som jeg gerne vil give mulighed for at tilføje flere rækker uden at reloade siden. Dvs. ved tryk på knappen "Udvid form" skal der komme en række mere med 2 tekstfelter og en checkbox.
Kan jeg gøre dette i JavaScript og hvordan?

<form action="" method="post" name="myForm">
<table width="200" border="1">
  <tr>
    <td><input name="firstname" type="text" /></td>
    <td><input name="lastname" type="text" /></td>
    <td><input name="pay" type="checkbox" value="payed" /></td>
  </tr>
  <tr>
    <td><input name="addfield" type="button" value="Udvid form" /></td>
    <td><input name="submit" type="submit" value="OK" /></td>
    <td></td>
  </tr>
</table>
</form>
Avatar billede roenving Novice
23. november 2005 - 17:26 #1
Det kan du godt, men medmindre behovet er rigtig mange/uendeligt antal, er det helt klart det nemmeste at skrive en stribe rækker og så vise dem ved behov ...

-- det er ikke så længe siden jeg snedkerede på en løsning, som kloner den første række og så indsætter den, men den kan jeg ikke lige finde, måske du bedre kan finde på en søgning !-)
Avatar billede jonas82 Nybegynder
23. november 2005 - 17:54 #2
Behovet er nok et sted mellem 1-50 rækker.
Er der en god side hvor man kan læse om den slags? Finder ikke umiddlbart noget ved søgning her på sitet.
Avatar billede roenving Novice
23. november 2005 - 18:12 #3
Tjah, hvor kan man læse om den slags finurligheder ...

-- det handler rigtig meget om DOM-ECMAscript binding og DOM-behandling, og jeg har kun fundet gode kilder til den slags ved at kigge på de eksempler, jeg er stødt ind i her på Eksperten, alle andre steder er det voldsomt fragmenteret (dog har min reference hjulpet mig godt !-)

-- hvis felterne godt må hedde det samme, kan du f.eks.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Tilføj række i form/tabel</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
function addRow(elm){
  var tb = document.getElementById("MinTBody");
  var tr = tb.getElementsByTagName("tr")[0];
  var nyTr = tr.cloneNode(true);
  var inps = nyTr.getElementsByTagName("input");
  for(i=0;inps.length>i;i++){
    if(inps[i].type == "text")
      inps.value = "";
  }
  var submitRow = getParent(elm, "tr");
  tb.insertBefore(nyTr,submitRow);
}
function getParent(elm,TagName){
  var parElm = elm.parentNode;
  while(parElm.tagName.toLowerCase() != TagName.toLowerCase())
    parElm = parElm.parentNode;
  return parElm;
}
</script>
</head>
<body>
<form action="" method="post" name="myForm">

<table width="200" border="1">
<tbody id="MinTBody">
  <tr>
    <td><input name="firstname" type="text"></td>
    <td><input name="lastname" type="text"></td>
    <td><input name="pay" type="checkbox" value="payed"></td>
  </tr>
  <tr>
    <td><input name="addfield" type="button" value="Udvid form" onclick="addRow(this);return false;"></td>
    <td><input name="submit" type="submit" value="OK"></td>
    <td></td>
  </tr>
</tbody>
</table>
</form>

</body>
</html>
Avatar billede roenving Novice
23. november 2005 - 18:17 #4
PS. Jeg ved ikke i hvor mange browsere den virker, men den er i hvert fald problemløs i mine (IE6 sp2, vist fra IE5.5, FF1.0.7 (Gecko 1.7.12), vist alle Geckoer inkl. Netscape 6+, Mozilla, Camino m.m. og Opera 8.02, hrm, der er nok et problem, men hvornår ?-)
Avatar billede jonas82 Nybegynder
23. november 2005 - 19:05 #5
Det ser rigtig fornuftigt ud. Kan jeg så hente data ud som et array?
Avatar billede jonas82 Nybegynder
23. november 2005 - 19:08 #6
Sidder ikke lige ved en maskine med serverside scripting, så jeg kan teste det lige nu :-)
Avatar billede roenving Novice
23. november 2005 - 19:09 #7
Jeg har ofte set nævnt, at man så skal navngive felterne med array-notation til php, altså bliver det sådan:

    <td><input name="firstname[]" type="text"></td>
    <td><input name="lastname[]" type="text"></td>
    <td><input name="pay[]" type="checkbox" value="payed"></td>

-- hvordan det ser ud i f.eks. asp eller jsp har ikke den anelste fjernelse om !-)
Avatar billede jonas82 Nybegynder
23. november 2005 - 19:18 #8
Så er det heldigt jeg bruger php :-)

Tusind tak for din hjælp. Du må gerne lægge et svar.
Avatar billede roenving Novice
23. november 2005 - 19:21 #9
Velbekomme '-)
Avatar billede roenving Novice
23. november 2005 - 19:24 #10
-- 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

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