我正在尝试在网页上有条件地显示来自MongoDB的文档。用户应该从选择元素中选择一个选项,然后相应地过滤文档。如果用户选择了第一年选项,那么只有数据库字段为“第一年”的项目才会显示在使用ejs模板的页面上,如下图所示
enter image description here
我设法从数据库中提取了所有文档,并能够在ejs模板上显示它们。我还设法在select选项上添加了一个事件侦听器,以便在模板上呈现条件信息。我只是不确定如何将数据文档连接到select元素。
这是我的注册.ejs文件
<label for="year">Select year</label>
<select name="year" id="year">
<option value="0">Year 1</option>
<option value="1">Year 2</option>
<option value="2">Year 3</option>
<option value="3">Year 4</option>
</select>
<div class="modules">
<% for (const module of modules) {%>
<ul id="module-list">
<li>
<!-- <input type="checkbox" name="module" id="<%= module._id %>" value="<%= module._id%>"/>
<label for="<%= module._id%>"><%= module.moduleCode%></label> -->
</li>
</ul>
<% } %>
</div>
这是我的浏览器端脚本
const yearSelectorElement = document.getElementById('year');
async function updateModules() {
if (yearSelectorElement.value == "0") {
document.getElementById('module-list').innerHTML = "<li>Item1</li>"
} else if (yearSelectorElement.value == "1") {
document.getElementById('module-list').innerHTML = "<li>Item2</li>"
} else if (yearSelectorElement.value == "2") {
document.getElementById('module-list').innerHTML = "<li>Item3</li>"
} else {
document.getElementById('module-list').innerHTML = "<li>Item4</li>"
}
}
yearSelectorElement.addEventListener('change', updateModules);
这是我的注册控制器文件
const db = require('../data/database');
async function getRegistration (req, res) {
const modules = await db.getDb().collection('modules').find().toArray();
res.render('student/registration/registration', { modules: modules });
};
module.exports = {
getRegistration: getRegistration,
}
1条答案
按热度按时间ycl3bljg1#
我自己想出来的。我把数据从MongoDB渲染到我的EJS模板。然后,我使用几个div过滤数据,并使用一个隐藏的类,然后使用select元素在div上添加或删除类,以显示或隐藏内容。
这是我现在的注册EJS文件
浏览器端脚本: