2016-07-06 4 views
3

Ich habe ein Dropdownlist, die durch diese erstellt:Finden Wert von optgroup in 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; 
} 

Jetzt ist mein 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(); 
     } 
    }); 
}); 

Jetzt funktioniert das perfekt, aber es ist eher statisch und nicht dynamisch zu Benutzeränderungen. Also, anstatt mit der wörtlichen Zeichenfolge zu vergleichen .. gibt es eine Möglichkeit, gegen die Reihenfolge der Gruppen zu vergleichen? Also, da STH die erste Gruppe ist, oder <optgroup> als in HTML gerendert, kann ich das vergleichen?

Als Beispiel dafür, was ich versuche ich dies habe versucht zu erklären:

$(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(); 
     } 
    }); 
}); 

aber das funktioniert nicht.

Jede Hilfe wird geschätzt.

Antwort

1

Also, wenn ich richtig bin, möchten Sie den Index (Reihenfolge) der <optgroup> in Ihrem <select> für die ausgewählte <option> erhalten.

ein grundlegendes HTML-Beispiel Gegeben wie:

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

Sie den folgenden jQuery-Code verwenden können:

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

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

Der Ausgang wäre:

Aktivität 1 -> 0

Aktivität 2 -> 0

Aktivität 3 -> 1

Aktivität 4 -> 1

Aktivität 5 -> 2

Aktivität 6 -> 2

Also in Ihrem Beispiel könnte man verwenden :

$(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(); 
    } 
    }); 
}); 

Hinweis tha t Indizes beginnen von 0 und nicht 1.

+0

ahh das hat funktioniert! Ich danke dir sehr! –

+0

irgendwelche Dokumentation zu diesem Thema? Ich überprüfe [dies] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement), kann aber '.index()' oder '.parent()' –

+1

nicht finden. Sicher, Da Ihr Beispiel gezeigt hat, dass Sie jQuery verwenden, entschied ich mich, ihre Hilfsfunktionen zu verwenden, um eine sauberere Syntax zu erhalten, da sie da ist.Sie finden die Dokumentation hier: [index] (https://api.jquery.com/index/) & [parent] (https://api.jquery.com/parent/). – HiDeo