2010-08-29 6 views
1

j'ai ce codecomment obtenir la prochaine liste déroulante par rapport à l'aide jquery

<div id="aggregate" style="display:inline"> 
        <%=Html.RadioButton("a", "1", true, new {id = "meRadio"})%><label>Me</label> 
        <%=Html.RadioButton("a", "2", false, new { id = "teamRadio" })%><label>Team: </label><% = Html.DropDownList("Teams", Model.Teams, new {@scope="Team", @id = "teamDropdown", @class = "filterDropdown" })%> 
        <%=Html.RadioButton("a", "4", false, new { id = "managerRadio" })%><label>Manager: </label><% = Html.DropDownList("Managers", Model.People, new { @scope = "Manager", @id = "managerDropdown", @class = "filterDropdown" })%> 
        <%=Html.RadioButton("a", "5", false, new { id = "locationRadio" })%><label>Location: </label><% = Html.DropDownList("Locations", Model.Locations, new { @scope = "Location", @id = "locationDropdown", @class = "filterDropdown" })%> 
    </div> 

i ont actuellement le code comme ceci:

$('#workstreamRadio').click(function() { 
    Enable("#workstreamDropdown"); 
}); 

$('#teamRadio').click(function() { 
    Enable("#teamDropdown"); 
}); 

Je suis sûr qu'il ya un moyen utilisant jquery pour obtenir le respectif dynamique sélecteur de liste déroulante donné un bouton radio spécifique cliqué, donc je ne dois pas coder en dur chaque cartographie.

ce qui est la syntaxe pour dire « moi le sélecteur du menu déroulant à droite du bouton radio i clicked »

Répondre

2

Vous pouvez le faire en utilisant .nextAll() et :first comme ceci:

$("#aggregate :radio").change(function() { 
    var dropdown = $(this).nextAll("select:first"); 
    //enable or disable dropdown 
}); 

comme ils sont frères et sœurs, utilisez .nextAll() qui passe par tous les frères et soeurs, et vous voulez le premier élément <select>, donc sélectionnez celui des frères et sœurs après que la radio ait cliqué. Regardez également en utilisant .change() ici au lieu de .click(), il se déclenchera seulement lorsque la sélection change, ce qui est habituellement ce que vous voulez ici.

+0

sera-ce gérer la première entrée qui n'a pas de liste déroulante. Je veux seulement que cela s'applique à tous les autres boutons radio sauf le premier car le premier a une logique légèrement différente. Je pensais avoir un attribut de classe sur tous les boutons radio sauf le premier pour résoudre ce problème. – leora

+0

@ooo - Vous pouvez changer le sélecteur pour la liaison, changer '$ (" # aggregate: radio ")' en $ ("# aggregate: radio: gt (0)") 'pour ignorer la première radio, et il a gagné 't être lié :) –

+0

pourquoi 'nextAll (' select: first ')' et pas 'next (' select ')'? –