Avatar billede bongii Nybegynder
25. marts 2007 - 14:11 Der er 31 kommentarer og
2 løsninger

request et felt vha. en variabel

Hej.

Hvordan requester jeg et felt vha. en given variabel?
Variabel: iteration

document.forms[0].Antal(HER SKAL DEN SKRIVE VARIABLEN).value;

F.eks. Antal1, Antal2, Antal3 osv.
Iteration variablen er et tal.
Avatar billede prof2 Nybegynder
25. marts 2007 - 15:22 #1
Har du prøvet:
document.forms[0].Antal(iteration).value;

;-)
Avatar billede bongii Nybegynder
25. marts 2007 - 19:01 #2
Fejl: Objektet understøtter ikke denne egenskab eller metode...?
Avatar billede prof2 Nybegynder
25. marts 2007 - 19:52 #3
oMen det er lidt svært, når du ikke skriver hvordan du laver dine antal form elementer i HTML koden. Men et hurtigt bud er vel at skrive:

document.forms[0].Antal[iteration].value;

Men det er hvis du har et array af form elementer?
Avatar billede bongii Nybegynder
25. marts 2007 - 19:55 #4
Prof2: Det virker heller ikke.
Du kan se koden her: Scriptet opretter en ny row. Jeg vil gerne have value til at være f.eks. request.form("Antal1") osv.

var Antal = document.createElement('input');
          Antal.type = 'text';
          Antal.name = 'Antal' + iteration;
          Antal.id = 'Antal' + iteration;
          Antal.size = 3;
          Antal.value = ''
          cellLeft.appendChild(Antal);
Avatar billede crazysnap Seniormester
25. marts 2007 - 20:29 #5
Hej bongi,

Jeg forstår ikke helt din problemstilling, er det noget lignende du ønsker?:


var antal = 2;
       
var elm;
for(var i = 1; i <= antal; i++)
{
  elm = document.getElementById('Antal' + i);
           
  if(elm != null)
      elm.value = "request.form('Antal" + i +"')";
}


I det script henter den alle felter med id='Antal' + 'et tal' og sætter deres value til en specifik værdi.


Mvh.

- Snap
Avatar billede bongii Nybegynder
25. marts 2007 - 20:38 #6
nej ikke helt...

Jeg har en funktion: AddRow. Den tilføjer en row i en tabel.

i den funktion er der en variabel der hedder:
Antal.value = '';
Antal.name = 'Antal' + iteration;

Antal er en input felt. Jeg vil gerne have sådan at value = det samme felt.

I asp ville det være let nok:
request.form("Antal1") osv.. Kan satme ikke lige kringle den :)
Avatar billede bongii Nybegynder
25. marts 2007 - 20:45 #7
Tror det har noget med document.forms[0].Antal(iteration).value; at gøre... Den skal jo requeste en form..?
Avatar billede bongii Nybegynder
25. marts 2007 - 20:47 #8
I asp ser det sådan ud: request.form(Cstr("Antal"&i))

Hvordan omskriver man det til Java Script?
Avatar billede crazysnap Seniormester
25. marts 2007 - 20:52 #9
Hmmm... tænke tænke...

Altså Request.Form bruges til at opsample vædier fra felter i en form og du siger du gerne vil have at value på dit Antal input felt skal være lig med værdien af 'Antal1' feltet. dvs noget lignende:


Antal.value = document.getElementById('Antal' + iteration).value;
Antal.name = 'Antal' + iteration;


Ellers kan jeg simpelthen ikke forstå hvad det er du prøver at nå frem til! :). Kan være jeg er lidt ekstra langsom her en søndag aften.


Mvh.

- Snap
Avatar billede roenving Novice
25. marts 2007 - 22:28 #10
document.formnavn.elements['antal'+i] ?-)
Avatar billede roenving Novice
25. marts 2007 - 22:29 #11
Hrm, case-sensitivity:

document.formnavn.elements['Antal'+i] ?-)
Avatar billede bongii Nybegynder
26. marts 2007 - 12:05 #12
Det kan godt ske det er mig der ikke forstår det, men det virker ikke.
Måske skal i lige have hele scriptet for at se det i en sammenhæng. Hvis i kører scriptet på localhost, kan se se hvad jeg mener. Det sidste jeg mangler er at De indtaste felter skrives i boksen efter man har trykket submit (hvis valideringen ikke går igennem - valideringen bliver på fornavn osv.)

<%
i = 0
do
    i = i + 1
    if request.form(Cstr("Antal"&i)) <> ""  then
        Dynamic = Dynamic & "Antal: "&request.form(Cstr("Antal"&i))&", Varenummer: "&request.form(Cstr("VareNummer"&i))&", Tekst: "&request.form(Cstr("VareTekst"&i))& "<br>"
    else
        exit do
    end if
loop
antal = i-2
response.write Dynamic%>

<html>
    <head>
          <title>Page Title</title>
    <script language="Javascript" type="text/javascript">
 
    window.onload = function() { performCheck(); };

    function performCheck()
    {
        var antal1 = <%=antal%>;
       
        for(var i = 0; i < antal1; i++)
        {
            addRow();
        }
    }
   
    function addRow()
    {
          var tbl = document.getElementById('Table');
          var lastRow = tbl.rows.length;
          var iteration = lastRow;
          var row = tbl.insertRow(lastRow);

          var cellLeft = row.insertCell(0);
       
          // ANTAL
          var Antal = document.createElement('input');
          Antal.type = 'text';
          Antal.name = 'Antal' + iteration;
          Antal.id = 'Antal' + iteration;
          Antal.size = 3;
          Antal.value = 'Her skal den hente value';
          cellLeft.appendChild(Antal);

          var cellRight = row.insertCell(1);

          // VareNummer
          var VareNummer = document.createElement('input');
          VareNummer.type = 'text';
          VareNummer.name = 'VareNummer' + iteration;
          VareNummer.id = 'VareNummer' + iteration;
          VareNummer.size = 7;
          VareNummer.value = '';
          cellRight.appendChild(VareNummer);

          var cellRightSel = row.insertCell(2);
       
          // VareTekst
          var VareTekst = document.createElement('input');
          VareTekst.type = 'text';
          VareTekst.name = 'VareTekst' + iteration;
          VareTekst.id = 'VareTekst' + iteration;
          VareTekst.size = 40;
          VareTekst.value = '';
          cellRightSel.appendChild(VareTekst);
    }


</script>
    </head>
    <body leftmargin="0" topmargin="0">

          <form method="post">
              <table align="center" width = "75%">
                    <tr>
                        <td align = "center">
                        </td>
                    </tr>
                    <tr>
                        <td align = "center">

                              <table border="1" id="Table">
                                    <tr>
                                        <td>Antal</td>
                                        <td>VareNummer</td>
                                        <td>VareTekst</td>
                                  </tr>
                                  <tr>
                                        <td><input type="text" name="Antal1" id="Antal1" size="3" value="<%=request.form("Antal1")%>"></td>
                                        <td><input type="text" name="VareNummer1" id="VareNummer1" size="7" value="<%=request.form("VareNummer1")%>"></td>
                                        <td><input type="text" name="VareTekst1" id="VareTekst1" size="40" value="<%=request.form("VareTekst1")%>"></td>
                                  </tr>
                              </table>

                              <input type="button" value=" Tilføj" onclick="addRow();">
                              <input type="submit" value="Submit">
                        </td>
                    </tr>
              </table>
          </form>
    </body>
</html>
Avatar billede bongii Nybegynder
26. marts 2007 - 15:29 #13
Har bøvlet med det hele dagen, det kan da ikke passe det ikke kan løses drenge :)
Avatar billede crazysnap Seniormester
26. marts 2007 - 15:41 #14
Hej bongii,

Selvom du har postet det kode er jeg stadig ikke med på hvad du gerne vil have stående i "Antal.value". Du må lige skære det ud i pap for mig/os tror jeg. :)

Når man trykker på Tilføj-knappen tilføjer den en ny række med 3 nye input boxe. Den første input box skal have en værdi og det er her problemet ligger. Den værdi den skal have, hvor ligger den henne? På serveren? Er det en værdi fra javascript? En værdi fra en anden textbox på siden? Eller hvordan? :)


Mvh.

- Snap
Avatar billede roenving Novice
26. marts 2007 - 15:46 #15
Hvis jeg forstår dig ret, så ønsker du at indsætte tidligere indtastninger, hvis formen bliver reloadet ...

-- men der er en del mystisktheder ...

-- hvor kommer variablen iteration fra i javascriptet ?-)

Hvad er det, du udskriver udenfor html-koden med din asp-løkke ?o]
Avatar billede crazysnap Seniormester
26. marts 2007 - 15:53 #16
Iteration står direkte i scriptet hvor den kommer fra:

var tbl = document.getElementById('Table');
var lastRow = tbl.rows.length;
var iteration = lastRow;


:) --
Avatar billede bongii Nybegynder
26. marts 2007 - 16:06 #17
Crazysnap: Jeg ønsker som roenving skriver, at indsætte tidligere indtastninger når formen bliver reloaded.

ASP scriptet løber alle felter igennem og gemmer dem oio en streng. HVis valideringen gennemføres, bliver data postet i en database.  Hvis ikke skal siden vises igen og alle tidligere indtastninger skal vises...

Jeg har uploaded scriptet her: www.movievizion.dk/upload/test.asp

Det kan gdot ske jeg har grebet det helt forkert an fra starten, men som jeg ser det mangler jeg kun en lille bitte del for at få det til at virke som jeg ønsker.

Snakker jeg total sort snak ;)?
Avatar billede roenving Novice
26. marts 2007 - 16:10 #18
Hvis du skal bruge data i javascriptet, skal du oprette noget, som javascript kan aflæse, f.eks. et javascript-object:


<html>
    <head>
          <title>Page Title</title>
    <script language="Javascript" type="text/javascript">
var data = [<%
i = 0
do
    i = i + 1
    if request.form(Cstr("Antal"&i)) <> ""  then
        if i>1 then response.write(",")
        response.write"{'Antal': '"&request.form(Cstr("Antal"&i))&"', 'Varenummer': '"&request.form(Cstr("VareNummer"&i))&"', 'Tekst': '"&request.form(Cstr("VareTekst"&i))& "'}"
    else
        exit do
    end if
loop
response.write("];")
antal = i-2
%>
 
    window.onload = function() { performCheck(); };

-- så kan du hente værdien fra variablen data, f.eks.

data[1].Varenummer !-)
Avatar billede roenving Novice
26. marts 2007 - 16:12 #19
-- PS. Ovenstående er under den forudsætning, at .write ikke indsætter linjeskift !-)
Avatar billede bongii Nybegynder
26. marts 2007 - 16:32 #20
hehe jeg er ved at stå en smule af. hvor og hvordan henter jeg præcis data ud med
data[1].Varenummer
Avatar billede roenving Novice
26. marts 2007 - 16:43 #21
Antal.size = 3;
          Antal.value = data[iteration-2].Antal;
          cellLeft.appendChild(Antal);
Avatar billede bongii Nybegynder
26. marts 2007 - 17:08 #22
Jeg har ændret -2 til data[iteration-1].Antal;

Nu gør den det rigtigt, men vil ikke tilføje en ny row. Den skriver et eller andet med null eller objekt.

Tjek www.movievizion.dk/upload/test.asp
Avatar billede roenving Novice
26. marts 2007 - 17:20 #23
Test om tingen findes:

          Antal.value = data ? data[iteration-1].Antal : "";

-- måske skal du teste på både data og data[iteration-1] ...
Avatar billede bongii Nybegynder
26. marts 2007 - 18:22 #24
Jeg er stået lidt af - desværre.
Hvor skal testen ligges ind? en if sætning?: Antal.value = data[iteration].Antal;

Hvorfor kan jeg ikke gøre sådan (eller kan det omskrives til java):
Antal.value = <%request.form(Cstr("Antal"&%>iteration<%))%>
Avatar billede roenving Novice
26. marts 2007 - 18:28 #25
I stedet for den tildeling, der står i javascript-koden skriver du den angivne !-)
Avatar billede crazysnap Seniormester
26. marts 2007 - 21:37 #26
Så er jeg også tilbage, og ud fra jeres sidste kommentare har jeg også endelig forstået problemetstillingen. LOL :)


Hele problemet ligger i at man ikke kan få fat i en javascript variabel i ASP og derfor ikke gøre noget lignende:

Antal.value = '<%request.form(Cstr("Antal%>' + iteration + '"))%>'


Men så kan du nemlig gøre præcis som roenving foreslår, nemlig at gemme det hele i en javascript variabel (som f.eks. hedder data) og tilgå den ved data[] som også er beskrevet ovenover. Idet det stadig lyder som om der er lidt forvirring har jeg sammensat hele proceduren for dig:      :)



<html>
    <head>
          <title>Page Title</title>
    <script type="text/javascript">
      var data = [<%
                i = 0
                do
                i = i + 1
                if request.form(Cstr("Antal"&i)) <> ""  then
                      if i>1 then response.write(",")
                          response.write"{'Antal': '"&request.form(Cstr("Antal"&i))&"', 'Varenummer': '"&request.form(Cstr("VareNummer"&i))&"', 'Tekst': '"&request.form(Cstr("VareTekst"&i))& "'}"
                      else
                          exit do
                      end if
                loop
                response.write("];")
                antal = i-2
                %>

    window.onload = function() { performCheck(); };

    function performCheck()
    {
        var antal1 = <%=antal%>;
       
        for(var i = 0; i < antal1; i++)
        {
            addRow();
        }
    }
   
    function addRow()
    {
          var tbl = document.getElementById('Table');
          var lastRow = tbl.rows.length;
          var iteration = lastRow;
          var row = tbl.insertRow(lastRow);

          var cellLeft = row.insertCell(0);
       
          // ANTAL
          var Antal = document.createElement('input');
          Antal.type = 'text';
          Antal.name = 'Antal' + iteration;
          Antal.id = 'Antal' + iteration;
          Antal.size = 3;
          Antal.value = data[iteration-1] ? data[iteration-1].Antal : "";
          cellLeft.appendChild(Antal);

          var cellRight = row.insertCell(1);

          // VareNummer
          var VareNummer = document.createElement('input');
          VareNummer.type = 'text';
          VareNummer.name = 'VareNummer' + iteration;
          VareNummer.id = 'VareNummer' + iteration;
          VareNummer.size = 7;
          VareNummer.value = data[iteration-1] ? data[iteration-1].Varenummer : "";
          cellRight.appendChild(VareNummer);

          var cellRightSel = row.insertCell(2);
       
          // VareTekst
          var VareTekst = document.createElement('input');
          VareTekst.type = 'text';
          VareTekst.name = 'VareTekst' + iteration;
          VareTekst.id = 'VareTekst' + iteration;
          VareTekst.size = 40;
          VareTekst.value = data[iteration-1] ? data[iteration-1].Tekst : "";
          cellRightSel.appendChild(VareTekst);
    }


</script>
    </head>
    <body leftmargin="0" topmargin="0">

          <form method="post">
              <table align="center" width = "75%">
                    <tr>
                        <td align = "center">
                        </td>
                    </tr>
                    <tr>
                        <td align = "center">
                              <table border="1" id="Table">
                                    <tr>
                                        <td>Antal</td>
                                        <td>VareNummer</td>
                                        <td>VareTekst</td>
                                  </tr>
                                  <tr>
                                        <td><input type="text" name="Antal1" id="Antal1" size="3" value="<%=request.form("Antal1")%>"></td>
                                        <td><input type="text" name="VareNummer1" id="VareNummer1" size="7" value="<%=request.form("VareNummer1")%>"></td>
                                        <td><input type="text" name="VareTekst1" id="VareTekst1" size="40" value="<%=request.form("VareTekst1")%>"></td>
                                  </tr>
                              </table>

                              <input type="button" value=" Tilføj" onclick="addRow();">
                              <input type="submit" value="Submit">
                        </td>
                    </tr>
              </table>
          </form>
    </body>
</html>


Dette burde give dig den forventede opførelse: når der klikkes Submit og der er indtastet mere end én række, populerer den tabellen igen med den information som brugeren tastede ind. :)


Mvh.

- Snap
Avatar billede bongii Nybegynder
27. marts 2007 - 11:10 #27
Kom til Århus, så giver jeg en bytur til jer begge!
Avatar billede crazysnap Seniormester
28. marts 2007 - 09:28 #28
Pas på hvad du siger! Der skal ikke meget til før jeg drager langt for en øl eller to! ;)


Glad for at du fik løst dit problem og det må næsten være roenving der tager æren for denne her. :)  (så roenving kaster du et svar så vi kan få lukket spørgsmålet?)


Mvh.

- Snap :)
Avatar billede roenving Novice
28. marts 2007 - 11:44 #29
For mig ligner det en oplagt deler, så skal vi ikke lægge den der !-)

Velbekomme '-)
Avatar billede bongii Nybegynder
28. marts 2007 - 11:49 #30
Det syntes jeg lyder som en god idé. Snap...
Avatar billede roenving Novice
28. marts 2007 - 12:02 #31
-- og byturen sender du bare billetterne til ;o}
Avatar billede crazysnap Seniormester
28. marts 2007 - 12:08 #32
Hehe, godt så! :)


Så kommer der også lige et lille svar herfra.


:)
Avatar billede roenving Novice
28. marts 2007 - 12:24 #33
-- 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