2016-07-06 48 views
3

我有被此创建一个下拉列表:查找OPTGROUP的价值DDL

C#:


public static List<SelectListItem> lstDailySumAssignments() 
{ 
    List<SelectListItem> lstAssignments = new List<SelectListItem>(); 

    using(var context = new AviationLogsEntities()) 
    { 
     List<codeAC> lstActivity = context.codeAC.Where(x => x.deleted == false).ToList(); 

     List<string> lstCategories = new List<string>() { "STH", "NT", "STHLVGMA", "CS", 
                   "S&R", "R", "S", "P", "D", "T", "P", "REFUSAL", "SERVICE & TESTING", "SE", "E", 
                   "AG", "P", "P", "DA", "HTH", 
                   }; 

     List<string> lstTraining = new List<string>() { "SEH", "MEH", "SEA", "IT", "HT", "ELT", 
                  "TO", "CSEH", "CMEH", "CSEA" }; 

     var groups = lstActivity.OrderBy(x => x.codeAC.Text).ThenBy(x => lstTraining.IndexOf(x.text)).ThenBy(x => x.text).GroupBy(x => x.codeAC.Text).OrderBy(g => lstCategories.IndexOf(g.Key)); 
     foreach(var group in groups) 
     { 
      var slg = new SelectListGroup() { Name = group.Key }; 

      foreach(codeAC activity in group) 
      { 
       SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = slg }; 
       lstAssignments.Add(item); 
      } 
     } 

    } 

    return lstAssignments; 
} 

现在我javascipt的:


$(document).ready(function() { 
    $('#activityID').change(function() { 
     var selectedActivity = this.options[this.selectedIndex].parentNode.label; 
     if (selectedActivity === "STH") { 
      $('#EnsureTransport').show(); 
     } 
     else if (selectedActivity !== "STH") { 
      $('#EnsureTransport').hide(); 
     } 
    }); 
}); 

现在这个完美的作品,但它是相当静态的,不是动态的用户变化。所以,而不是比较字面上的字符串..有没有一种方法来比较组的顺序?因此,由于STH是第一组,或者是以HTML格式呈现的<optgroup>,所以我可以与之比较吗?

由于什么,我试图解释我已经试过这样一个例子:

$(document).ready(function() { 
    $('#activityID').change(function() { 
     var selectedActivity = this.options[this.selectedIndex].parentNode.value; 
     if (selectedActivity === 1) { 
      $('#EnsureTransport').show(); 
     } 
     else if (selectedActivity !== 1) { 
      $('#EnsureTransport').hide(); 
     } 
    }); 
}); 

但这不起作用。

任何帮助表示赞赏。

回答

1

因此,如果我是正确的,您想要在<select>中为所选<option>获得<optgroup>的索引(订单)。

给出一个基本的HTML示例像:

<select id="activityID"> 
    <optgroup label="STH"> 
    <option value="1">Activity 1</option> 
    <option value="2">Activity 2</option> 
    </optgroup> 
    <optgroup label="OTHER"> 
    <option value="3">Activity 3</option> 
    <option value="4">Activity 4</option> 
    </optgroup> 
    <optgroup label="ANOTHER"> 
    <option value="5">Activity 5</option> 
    <option value="6">Activity 6</option> 
    </optgroup> 
</select> 

可以使用以下jQuery代码:

$(document).ready(function() { 
    $('#activityID').change(function() { 
    var selected = $("option:selected", this); 
    var groupIndex = selected.parent().index(); 

    console.log(groupIndex); 
    }); 
}); 

输出将是:

活动1 - > 0

活动2 - > 0

活动3 - > 1

活动4 - > 1

活动5 - > 2

活动6 - > 2

所以在你的例子,可以使用:

$(document).ready(function() { 
    $('#activityID').change(function() { 
    var selected = $("option:selected", this); 
    var selectedActivity = selected.parent().index(); 

    if (selectedActivity === 0) { 
     $('#EnsureTransport').show(); 
    } 
    else if (selectedActivity !== 0) { 
     $('#EnsureTransport').hide(); 
    } 
    }); 
}); 

注意tha吨索引从0开始,而不是1.

+0

啊,工作!非常感谢! –

+0

关于此的任何文档?我正在评论[this](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement),但找不到'.index()'或'.parent()' –

+1

当然,由于您的示例显示您使用的是jQuery,因此我决定使用它的帮助函数来获取更清晰的语法。你可以在这里找到文档:[index](https://api.jquery.com/index/)&[parent](https://api.jquery.com/parent/)。 – HiDeo