2016-06-30 2 views
0

Ich versuche zu lernen, eine Webapp mit JavaScript neben nodejs zu machen. Ich habe keine Ideen mehr und habe keine Ahnung, ob ich das richtig mache. Also was ich versuche zu tun ist, wenn ein Benutzer auf eine Zeile einer dynamisch erzeugten Tabelle klickt, öffnet er eine neue HTML-Seite mit einer Menge von Formulareingaben, die bereits mit den Werten in einem json gefüllt sind. Gerade jetzt habe ich es, dass, wenn ich auf die Tabellenzeile klicke, ich die gewählte Id bekommen kann und als ein Test will ich es in ein Eingabefeld laden, aber ich bekomme es als undefinedWert an eine andere Webseite übergeben

einen guten Teil der Tabelle erstellen Funktion mit der Füllformfunktion

for (i = 0; i < attendee.length; i++) { 
     var tr = document.createElement('TR'); 
     if(i % 2 == 0) 
     { 
      tr.bgColor = '#E9F2F5'; 
     } 
     for (var j = 0; j < attendee[i].length; j++) { 
      var td = document.createElement('TD'); 

      /* if (j != 0) { 
       td.setAttribute('contenteditable', 'true'); 
      }*/ 
      td.appendChild(document.createTextNode(attendee[i][j])); 
      tr.appendChild(td); 

      var currentRow = table.rows[i]; 
      var createClickHandler = 
       function(tr) 
       { 
        return function() { 
         var cell = tr.getElementsByTagName("td")[0]; 
         var id = cell.innerHTML; 
         fillForm(id); 
        }; 
       }; 
      currentRow.onclick = createClickHandler(currentRow); 
     } 
     tableBody.appendChild(tr); 
    } 
    myTableDiv.innerHTML = ""; 
    myTableDiv.appendChild(table); 
} 

// this function is included in the html page as a onload function 
function fillForm(id) 
{ 
    window.open("/populatedForm.html"); 
    document.getElementById("id").value = id; 
    console.log(id); 
} 

Ein Teil der HTML-Eingabe, die ich ausfüllen möchte.

<div class=container2> 
    <form method="PUT" action="/process-form" enctype="multipart/form-data" autocomplete="off"> 
     <fieldset> 
      <label> 
       ID<br/> 
       <input id="id" name="id" type="text" value=" " required/> 
      </label> 
      <br/> 

Dies ist, wie mein Tisch wie enter image description here

sieht Und das ist, wie der Eingang aussieht, wenn ich in der Tabelle auf einer Zeile klicken. Es öffnet die neue HTML-Seite, aber die Eingabe wird auf undefiniert gesetzt. Ich habe den Rest nicht gemacht, da ich nicht zur Arbeit kommen kann. enter image description here

Jeder Rat wäre großartig! Vielen Dank!

+0

Haben Sie einen Shop oder irgendetwas zu speichern auf Ihrer Webseite? Ich denke, was passiert, dass Sie nicht genau aus dem Code erkennen können ist, wenn die neue Webseite auftaucht, ist es eine frische Seite ohne Status. Ist das eine einseitige Anwendung? Wenn das nicht der Fall ist, müssen Sie einen Parameter über die URL senden oder einen anderen Weg wählen, um ihn an die Seite zu übergeben. Sie können auch einen Browserspeicher verwenden, um den Status zu speichern. –

+0

Nein, ich habe keinen Speicher, denke ich. Es ist keine einzelne Seite App. Aber ich habe in den Browserspeicher geschaut (lokaler Speicher ist was ich vermute, dass du meinst) und ich habe es gerade ausprobiert und es funktionierte für den Id-Eingang, den ich für die anderen ausprobieren musste. Aber ist es sicher, lokalen Speicher zu verwenden? –

+0

Es hat seine Probleme, ich würde sehr empfehlen, die Variablen als Parameter in der URL zu übergeben und es von dort zu ergreifen. Ich denke, ein Teil des Problems, das Sie haben, setzt Geschäftslogik und viel davon auf das Frontend, wenn Sie es vom Server aus tun sollten.Ich würde empfehlen, in serverseitigen und clientseitigen Routing zu suchen und dieses Projekt von dort aus zu beenden. –

Antwort

1

Ich werde hier weiter unten antworten, da es zu lang ist, dass ich in den Kommentaren poste.

Sobald Sie herausfinden, wie Sie Routing tun, werden Sie es nicht anders machen wollen, hier ist eine große Ressource http://expressjs.com/en/guide/routing.html. Sehen Sie sich den Abschnitt Routenparameter an.

Also was ich tun würde, ist eine Route wie /populatedForm/:id. In Express wird es ungefähr so ​​aussehen.

app.get('/populatedForm/:id', function(req, res) { 
    res.send(req.params); 
}); 

req.params wird die ID Sie greifen wollen packen, und dann sagt, wo es res.send() ist, wo Sie alle Geschäftslogik von dieser Strecke umgehen kann. Das ist, wo ich einen Anruf an die Datenbank machen würde, um alle Informationen für diese ID zu erhalten, und dann senden Sie es als Json, dann behandeln Sie den JSON an Ihrem Frontend.

es so etwas wie dieses

app.get('/populatedForm/:id', function(req, res) { 
    var myJson = getIdAndOtherInfoFromDatabase(req.params); 
    res.send(myJson); 
}); 

Dann schauen würden Sie alles davon auf dem vorderen Ende über JSON umgehen kann. Ich würde etwas über dieses Zeug googeln, wenn Sie verwirrt werden oder feststecken.

+0

klingt gut wird viel mehr in es schauen! Vielen Dank –