2014-03-05 121 views
0

我有2個數組,我需要輸入一個多選。 第一個循環是打印所有類別,而第二個循環只有在數據庫中存在時才必須添加「selected」。Node.js嵌套forEach

<select class="form-control" multiple name="category" style="margin-top: 20px;"> 
    <% categories.forEach(function (cat){ %> 
     <% operation.category.forEach(function (key){ %> 
      <option value="<%= cat._id %>" <% if(key == cat._id){ %>selected<% } %>><%= cat.name %></option> 
     <% }); %> 
    <% }); %> 
</select> 

結果:

<select class="form-control" multiple name="category" style="margin-top: 20px;"> 
     <option value="5316fff4542a276208095eb6" >Cat 1</option> 
     <option value="5316fff4542a276208095eb6" >Cat 1</option> 

     <option value="5316fc2170f952fb076e1fd5" >Cat 2</option> 
     <option value="5316fc2170f952fb076e1fd5" >Cat 2</option> 

     <option value="5316fc1a70f952fb076e1fd4" selected>Cat 3</option> 
     <option value="5316fc1a70f952fb076e1fd4" >Cat 3</option> 

     <option value="5316fc1170f952fb076e1fd3" >Cat 4</option> 
     <option value="5316fc1170f952fb076e1fd3" selected>Cat 4</option> 

爲什麼被克隆?

+0

提示:嵌套的循環將輸出'categories.length * operation.category.length'選項元素。 – nnnnnn

回答

0

您正在輸出所選的每個categories的整個operation.category列表。

相反,試試這個:

<select class="form-control" multiple name="category" style="margin-top: 20px;"> 
    <% operation.category.forEach(function (key){ %> 
     <option value="<%= cat._id %>"<% categories.forEach(function (cat){ 
     if(key == cat._id){ %> selected<% } 
     }); %>><%= cat.name %></option> 
    <% }); %> 
</select> 

甚至更​​好

<select class="form-control" multiple name="category" style="margin-top: 20px;"> 
    <% operation.category.forEach(function (key){ %> 
     <option value="<%= cat._id %>"<% 
     if (categories.some(function (cat){ 
      return key == cat._id; 
     })) { 
      %> selected<% 
     } 
     %>><%= cat.name %></option> 
    <% }); %> 
</select> 
+0

不起作用給我一個500錯誤:( –

+0

哪一個?什麼是錯誤?檢查你的日誌中是否有確切的錯誤信息。 – Bergi

+0

TypeError:/vagrant/src/contonline/views/bill/edit.ejs:33 31 | 32 |