在DDL中查找optgroup的值

时间:2016-07-06 15:37:46

标签: javascript c#

我有一个由此创建的下拉列表:

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是第一个组,或者<optgroup>,因为它在HTML中呈现,我可以与之进行比较吗?

作为我试图解释的一个例子,我试过这个:

$(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 个答案:

答案 0 :(得分:1)

所以,如果我是正确的,你想获得所选<optgroup>的{​​{1}} <select>的索引(顺序)。

给出一个基本的HTML示例,如:

<option>

您可以使用以下jQuery代码:

<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>

输出结果为:

  

活动1 - &gt; 0

     

活动2 - &gt; 0

     

活动3 - &gt; 1

     

活动4 - &gt; 1

     

活动5 - &gt; 2

     

活动6 - &gt; 2

因此,在您的示例中,可以使用:

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

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

请注意,索引从0而不是1开始。