2017-12-19 1 views
0

Wie durchkreuze ich die markierten Checkboxen, ohne jede einzelne Box einzeln zu codieren und zu prüfen. Kinda wie dieser Link, aber mit Node.js und nicht JavaScript Iterate all checkbox in JavaScript:Node.js Checkbox-Iteration

Also ich bin versucht, den Inhalt meiner Datenbank (MySQL) angezeigt werden, aber ich will nicht hart Code ‚req.body .CheckboxName 'für jedes Kontrollkästchen, falls eine neue Spalte zu einer Tabelle hinzugefügt wird (die Kontrollkästchen sind jede der Spalten in einer gegebenen Tabelle). Also muss ich einen Weg finden, der durch jedes Kontrollkästchen auf der Webseite iteriert und überprüft, ob es aktiviert ist. Wenn dies der Fall ist, fügen wir sie in einer Zeichenfolge zusammen und fragen nach diesen Spalten. Mein Code unten ist für die POST-Methode von Node.js (nachdem ich das Einreichen erreicht habe, sobald die Ankreuzfelder markiert sind) und der andere ist mein Pug/Jade-Code (die JavaScript Templating Engine, die ich benutze, tut mir leid, es ist nicht einfach HTML).

Wenn Sie verwirrt sind, wie die Pug/Jade-Datei anfänglich ausgeführt wird, rendert eine andere GET-Methode diese Pug/Jade-Datei mit den Spaltennamen; dass GET-Methode ist im Grunde die POST-Methode unten nach oben, bis die '// Brauchen Sie Hilfe' line

Node.js

app.post('/GetTables', function(req, res){ 
    var columnsRequest = 'DESCRIBE ' + tableName; 
    var columnsList = []; 
    connection.query(columnsRequest, function(err, results, fields) { 
     if(err){ 
      throw err; 
     } 
     for (var index in results) { 
      console.log(results[index].Field); 
      columnsList.push(results[index].Field); 
     } 
    }); 


    //Need help, the next 5 or so lines are non-working ~psuedocode 
    var checkedList = '';  
    req.body.CHECKBOXES.each(function(index, element){ 
     if(CHECKBOX.ischecked(){ 
      checkedList += CHECKBOX.name() + ', ' 
     } 
    }); 


    var mysqlRequest = 'SELECT ' + checkedList + ' FROM ' + tableName; 
    connection.query(mysqlRequest, function(err, results, fields) { 
     if(err){ 
      throw err; 
     } 
     res.render('webPage', {'columnstodisplay': results}); 
    }); 

}); 

Mops/Jade

form(method = 'POST', action = '/GetTables', id = 'tableform') 
    fieldset 
     each item in columns 
      //this loop sets up the checkboxes for each of the columns 
      p 
       input(type="checkbox", name=item, value=item) 
       span #{item} 
       br 
     input(type ='submit', value ='Submit') 

Vielen Dank im Voraus!

Antwort

0

Entschuldigung, dass ich einen Monat gewartet habe, um meine eigene Frage zu beantworten. Unten ist der Code, den ich habe. Im Wesentlichen habe ich beim Klicken auf die Schaltfläche "Senden" eine JavaScript-Funktion aufgerufen, die anzeigt, welche Kontrollkästchen aktiviert sind, und zwei verborgene Elemente erstellt. ein Array von überprüften Checkboxen und die Zeichenfolge, die in der MySQL-Abfrage platziert werden soll (die Abfrage fragt nach den Spalten/den Checkboxen, die geprüft wurden).

app.post('/GetTables', function(req, res){ 
    var columnsRequest = 'DESCRIBE ' + tableName; 
    var columnsList = []; 
    connection.query(columnsRequest, function(err, results, fields) { 
     if(err){ 
      throw err; 
     } 
     for (var index in results) { 
      console.log(results[index].Field); 
      columnsList.push(results[index].Field); 
     } 
    });  
    //changed the line below**** 
    var mysqlRequest = 'SELECT ' + req.body.checkboxNames + ' FROM ' + tableName; 
    connection.query(mysqlRequest, function(err, results, fields) { 
     if(err){ 
      throw err; 
     } 
     //changed the line below******** 
     res.render('webPageName', {'columns': columnsList, 'rows': results, 'fields': fields, 'recheckboxes':req.body.checkboxArray}); 
    }); 

}); 

Mops/Jade

form(method = 'POST', action = '/GetTables', id = 'tableform') 
    fieldset 
     each item in columns 
      //this loop sets up the checkboxes for each of the columns 
      p 
       input(type="checkbox", name=item, value=item) 
       span #{item} 
       br 
     input(type ='submit', value ='Submit', onclick="sendCBs(document.thisForm, '/gettables')") 

     script. 
      function sendCBs(form, path, method) { 
       var cbNames = ''; 
       var cbArray = []; 
       var count = 0; 
       for (var i = 0; i < form.elements.length; i++) { 
        if (form.elements[i].type == 'checkbox') { 
          if (form.elements[i].checked == true) { 
           cbNames += form.elements[i].value + ', '; 
           cbArray.push(form.elements[i].value); 
           count++; 
          } 
         } 
        } 
        if(count > 0){ 
         cbNames = cbNames.replace(/,\s*$/, ""); //remove the last comma if 1 or more checkboxes selected 
        } 
        else{ 
         return; 
        } 

        method = method || "POST"; //if not specified, method will be post 
        var inputform = document.createElement("form"); 
        inputform.setAttribute("method", method); 
        inputform.setAttribute("action", path); 

        var hiddenField1 = createHiddenInput("checkboxNames", cbNames); 
        var hiddenField2 = createHiddenInput("checkboxArray", cbArray); 

        inputform.appendChild(hiddenField1); 
        inputform.appendChild(hiddenField2); 

        document.body.appendChild(inputform); 
        inputform.submit(); 
       }