jQuery: Conditionnel afficher un élément basé sur la zone de liste déroulante de sélection

J'ai deux listes déroulantes, dans lequel le contenu dans la deuxième liste déroulante dépend de la sélection effectuée dans la première. Par exemple, dans le code HTML suivant, vous aurez le choix de la méthode d'application de la première. Si vous choisissez Aérienne comme la méthode d'application, alors vous allez répondre à la question aériennes taille dist. Sinon, vous devez répondre de pulvérisation au sol type.

Donc, une fois que la page est chargée, les deux deuxième niveau de listes déroulantes (aérien taille dist., et de pulvérisation au sol de type.) sont cachés. Ils apparaissent uniquement lorsque le choix est fait dans le premier (méthode d'application).

Je suis en mesure de réaliser cette fonction en jQuery (en dessous de jQuery). Mais mon approche est assez stupide. Ma question est:

  1. Est-il un moyen de sélectionner toute la ligne, sans l'aide de comptage de sa séquence (nth-child())? Puis-je choisir l'ensemble de la ligne, basé sur la sélection d'un ID d'élément ? Par exemple, je peux d'abord sélectionner $('#id_A') et puis développez ma sélection pour l'ensemble de la ligne?

  2. Est-il une meilleure façon (une boucle?) pour atteindre cet masquer ou afficher la fonctionnalité plutôt que de comparer tous les choix possibles (($(this).val() == "X") )?

Merci!

Voici le code HTML, et le formulaire est généré par Django:

<div class="articles">
    <form method="GET" action=_output.html>
        <table align="center">
<tr><th><label for="id_application_method">Application method:</label></th><td><select  name="application_method" id="id_application_method">
<option value="">Pick first</option>
<option value="A">Aerial</option>
<option value="B">Ground</option>
</select></td></tr>

<tr><th><label for="id_A">Aerial Size Dist:</label></th><td><select name="aerial_size_dist" id="id_A">
<option value="A1" selected="selected">A1</option>
<option value="A2">A2</option>
</select></td></tr>

<tr><th><label for="id_B">Ground spray type:</label></th><td><select name="ground_spray_type" id="id_B">
<option value="B1" selected="selected">B1</option>
<option value="B2">B2</option>
</select></td></tr>
</table>                  
</form>
</div>

Voici le code jQuery:

<script type="text/javascript" src=" https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script> 

<script>$(function() {
    $("tr:nth-child(2)").hide();
    $("tr:nth-child(3)").hide();

    $('#id_application_method').change(function() {
    ($(this).val() == "A") ? 
    $("tr:nth-child(2)").show() : $("tr:nth-child(2)").hide();

    ($(this).val() == "B") ? 
    $("tr:nth-child(3)").show() : $("tr:nth-child(3)").hide();
    });});</script>

OriginalL'auteur TH339 | 2012-04-17