这里的新手Node.js:Node.js中的动态下拉菜单
什么是在node.js中创建动态下拉的简单方法?
基本上,我有两个表格:Skill
和Skill_Category
。
我想从Skill_Category
中选择,并与关联的Skill
一起呈现。
我会假设我需要使用一些模板引擎(在网页中呈现)。
我试着在google上研究一个很好的数额,但没有发现任何帮助我的东西。
如果有人能指出我正确的方向吗?
谢谢!
这里的新手Node.js:Node.js中的动态下拉菜单
什么是在node.js中创建动态下拉的简单方法?
基本上,我有两个表格:Skill
和Skill_Category
。
我想从Skill_Category
中选择,并与关联的Skill
一起呈现。
我会假设我需要使用一些模板引擎(在网页中呈现)。
我试着在google上研究一个很好的数额,但没有发现任何帮助我的东西。
如果有人能指出我正确的方向吗?
谢谢!
所以一个下拉将导致另一个显示。除非第二个下拉列表有数百个选项,否则您不希望发出单独的服务器端请求。这意味着您的逻辑应该全部位于浏览器/客户端。
这意味着您希望您的“Skill_Category”选择框具有一个JS功能,用于隐藏当前的“技能”选择框并显示新选择的“技能”选择框。它们都将通过您的模板呈现在HTML中,但只有一个会被显示(display:block
),而其他人被隐藏(display:none
)。
样本HTML:
<select id="skill_category">
<option value="communication">Communication</option>
<option value="teamwork">Team Work</option>
<option value="technical">Technical</option>
</select>
<select class="skill" id="communciation">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select class="skill" id="teamwork">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select class="skill" id="technical">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
示例jQuery代码:
$('#skill_category').on('change',function(){
$('.skill').hide()
$('#'+this.value).show()
});
如果你有对二次选择框选项的大名单,那么你可以创建一个ajax(HTTP GET)请求,并从服务器返回下拉列表的lsit作为JSON。 您可能会遇到以下两种情况之一:静态JSON文件中的所有技能,或者保存在数据库中。
您节点代码如下:
app.get('/skill_category/:skill', function(req, res){
//JSON file in the /public/skills directory
res.sendFile(__dirname + '/public/skills/'+req.params.skill+".json");
//or some database lookup followed by a json send:
var skills = someDatabaseLookup();
res.json(skills);
});
HTML
<select id="skill_category">
<option value="communication">Communication</option>
<option value="teamwork">Team Work</option>
<option value="technical">Technical</option>
</select>
<select id="skill">
</select>
而jQuery的,现在将是:
$('#skill_category').on('change',function(){
$.get('skill_category/'+this.value,function(data){
for(var j = 0; j < length; j++)
{
$('#skill').contents().remove();
var newOption = $('<option/>');
newOption.attr('text', data[j].text);
newOption.attr('value', data[j].value);
$('#skill').append(newOption);
}
});
});
请注意此代码是未经测试,但应该工作
尽管我可能拥有数百个[技能],但我怎样才能做到这一点,而不是加载所有立即隐藏一些? – CodeTalk 2014-10-06 14:58:51
这可能是最动态的功能,因为它会是最响应的。您可以考虑使用Angular或React等框架实现单页面应用程序,以进一步绑定您的数据 – 2016-12-20 17:34:07
您可以使用任何下拉库在那里运行客户端,为什么你想让它由你的模板引擎创建? “动态”下拉菜单意味着什么? – 2014-10-06 14:26:12
所以,让我澄清一下:它不需要由模板引擎创建。通过“动态下拉”,我说的是“动态”,因为从[技能类别]的第一个选择下拉菜单将决定[技能]下拉菜单中显示的内容 - 这是否有意义? – CodeTalk 2014-10-06 14:31:16
谢谢,让我考虑一下,我将起草一个答案 – 2014-10-06 14:32:17