Как выполнить итерацию с помощью отмеченных флажков без жесткого кодирования и проверки каждого окна по одному. Вроде как эта ссылка, но с Node.js, а не с JavaScript. Итерацию все флажок в JavaScript:
Поэтому я пытаюсь отобразить содержимое моей базы данных (используя MySQL), но я не хочу жестко кодировать "req.body.checkboxName" для каждого флажка, если новый столбец добавляется в таблицу (флажки каждый из столбцов в данной таблице). Поэтому мне нужно найти способ, который будет проходить через каждый флажок на веб-странице и посмотреть, проверено ли оно. Если это так, мы добавим их вместе в строку и запрос для этих столбцов. Мой код ниже для метода POST Node.js (после того, как он отправлен после того, как отмечены флажки), а другой - мой код Pug/Jade (использующий JavaScript-шаблон, извините, это не простой html).
Если вы сбиты с толку, как запускается файл Pug/Jade, другой метод GET отображает этот файл Pug/Jade с именами столбцов; что метод GET в основном является методом POST ниже до строки "//Need help"
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});
});
});
Мопс /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')
Заранее спасибо!
Извините за ожидание месяца, чтобы ответить на мой собственный вопрос. Ниже приведен код, который у меня есть. Фактически, что я сделал, когда нажала кнопка отправки, она называлась функцией JavaScript, которая видит, какие флажки отмечены, и создает два скрытых элемента; массив проверочных флажков и строку для размещения в запросе MySQL (запрос запрашивает столбцы/флажки, которые были отмечены).
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});
});
});
Мопс /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();
}