2014-10-06 162 views
0

这里的新手Node.js:Node.js中的动态下拉菜单

什么是在node.js中创建动态下拉的简单方法?

基本上,我有两个表格:SkillSkill_Category

我想从Skill_Category中选择,并与关联的Skill一起呈现。

我会假设我需要使用一些模板引擎(在网页中呈现)。

我试着在google上研究一个很好的数额,但没有发现任何帮助我的东西。

如果有人能指出我正确的方向吗?

谢谢!

+0

您可以使用任何下拉库在那里运行客户端,为什么你想让它由你的模板引擎创建? “动态”下拉菜单意味着什么? – 2014-10-06 14:26:12

+0

所以,让我澄清一下:它不需要由模板引擎创建。通过“动态下拉”,我说的是“动态”,因为从[技能类别]的第一个选择下拉菜单将决定[技能]下拉菜单中显示的内容 - 这是否有意义? – CodeTalk 2014-10-06 14:31:16

+0

谢谢,让我考虑一下,我将起草一个答案 – 2014-10-06 14:32:17

回答

2

所以一个下拉将导致另一个显示。除非第二个下拉列表有数百个选项,否则您不希望发出单独的服务器端请求。这意味着您的逻辑应该全部位于浏览器/客户端。

这意味着您希望您的“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); 
    } 
    }); 
}); 

请注意此代码是未经测试,但应该工作

+0

尽管我可能拥有数百个[技能],但我怎样才能做到这一点,而不是加载所有立即隐藏一些? – CodeTalk 2014-10-06 14:58:51

+0

这可能是最动态的功能,因为它会是最响应的。您可以考虑使用Angular或React等框架实现单页面应用程序,以进一步绑定您的数据 – 2016-12-20 17:34:07