2010-04-23 8 views
0

Cette question fait référence à la question Show/hide fields depending on select valueJquery Afficher les champs en fonction de la valeur Sélectionnez Menu, mais à la page charge

<select id="viewSelector"> 
    <option value="0">-- Select a View --</option>  
    <option value="view1">view1</option> 
    <option value="view2">view2</option> 
    <option value="view3">view3</option> 
</select> 

<div id="view1"> 
    <!-- content --> 
</div> 
<div id="view2a"> 
    <!-- content --> 
</div> 
<div id="view2b"> 
    <!-- content --> 
</div> 
<div id="view3"> 
    <!-- content --> 
</div> 



$(document).ready(function() { 
    $.viewMap = { 
    '0' : $([]), 
    'view1' : $('#view1'), 
    'view2' : $('#view2a, #view2b'), 
    'view3' : $('#view3') 
    }; 

    $('#viewSelector').change(function() { 
    // hide all 
    $.each($.viewMap, function() { this.hide(); }); 
    // show current 
    $.viewMap[$(this).val()].show(); 
    }); 
}); 

Lorsque je sélectionne le 2ème élément dans le menu il montre le champ correspondant. L'exception à ceci est lorsque le chargement de page sur le menu de sélection a déjà le 2ème élément de menu sélectionné, le champ ne s'affiche pas.

Comme vous pourriez être en mesure de dire, je suis nouveau jquery et pourrait definetly utiliser un peu d'aide à régler ce code afin que le champ de l'élément sélectionné est affiché sur la page de chargement.

Merci,

Tim

Répondre

2

La chose la plus facile à faire dans ce cas est juste t gréeur le gestionnaire comme ce change vous avez déjà/besoin:

$('#viewSelector').change(function() { 
    $.each($.viewMap, function() { this.hide(); }); 
    $.viewMap[$(this).val()].show(); 
}).change(); //only change to your code! 

Cela déclenche juste l'événement change sur le même sélecteur juste après avoir lié, donc il se produit sur document.ready (où vous liant) ainsi comme quand ça change. .change() sans argument est équivalent à .trigger('change').

+0

+1 pour la simplicité – Jeriko

+0

C'est exactement ce que je recherchais! Alors merci. Le Jquery dans le domaine de la saisie semi-automatique que je viens de révéler a cependant cessé de fonctionner. Si vous avez des indices sur pourquoi cela peut être, s'il vous plaît aider! – Tim

+0

Tous les autres scripts Jquery ont cessé de fonctionner sur cette page depuis l'ajout de .change(); des indices? – Tim

0

Déplacez le code dans une fonction et appeler onload ainsi - si vous avez stocké

$(document).ready(function() { 

    function toggleDivs(val) { 
     $.each($.viewMap, function() { this.hide(); }); 
     $.viewMap[val].show(); 
    } 

    toggleDivs($('#viewSelector').val()); 

    $.viewMap = { 
     '0' : $([]), 
    'view1' : $('#view1'), 
    'view2' : $('#view2a, #view2b'), 
    'view3' : $('#view3') 
    }; 

    $('#viewSelector').change(function() { 
    toggleDivs($(this).val()); 
    }); 
}); 

Bien sûr, vous auriez probablement pas besoin $.viewMap la données de sélection dans le code HTML du <option> .. data-selectors="#view2a, #view2b"

+0

Merci pour votre réponse rapide. Malheureusement, je n'ai pas de joie. Rien ne se charge plus et je ne sais pas comment le déboguer. – Tim

Questions connexes