IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Afficher/cacher un fieldset en fonction d'une checkbox


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Afficher/cacher un fieldset en fonction d'une checkbox
    Bonjour,

    Dans une page asp j'ai le checkbox suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:CheckBox ID="ishazard" runat="server" OnCheckedChanged="ishazard_CheckedChanged" />
    J'ai en dessous un fieldset comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <fieldset id="panelhazard" runat="server">
      <legend>&nbsp;Al&eacute;a&nbsp;</legend>
      ...
    </fieldset>
    Je veux que lorsque je coche ma checkbox cela rend invisible le fieldset( propriété css visible = false) et quand je décoche il apparait, par défaut c'est en invisible.

    J'ai réussis à faire quelque chose mais cela n'est pris en compte que lors de validation de la page.
    Voici le code de la fonction ishazard_CheckedChanged associer a l'évenement OnCheckedChanged.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void ishazard_CheckedChanged(object sender, EventArgs e)
    {
      if (!((CheckBox)sender).Checked)
      {
        panelhazard.Visible = false;
      }
      else
      {
        panelhazard.Visible = true;
      }
    }
    Je voudrais que cela se face donc coté client et non serveur.

    Pour cela j'ai tenté de faire une fonction javascript qui permet de le faire et avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ishazard.Attributes.Add("OnClick", "showHideHazardForm()");
    J'ajoute ma fonction javascript a ma checkbox.
    Dans mon code javascript j'ai voulu faire un getElementById, cela ce fonctionnait pas et en relisant la source de la page, je me suis aperçu que l'asp a changé les noms des id, il a rajouté dans le nom xxxcontentPlaceHolderxxx du au fait que ma page hérite d'une master page je suppose. Le fait est que... Je suis arrivé la et je ne sais pas quoi faire de plus à ce niveau la.

    Est-ce qu'il y a un moyen de forcer l'éxécution de ma fonction ishazard_CheckedChanged cote client?
    Sinon les ids générés automatiquement sont toujours les mêmes? car si je fais ma fonction javascript avec les ids recuperés de la source et qu'ils changent ensuite cela ne fonctionnera plus.

    ****************************

    Aussi dans la continuité, j'ai deux textbox qui contiennent des nombres, et une troisième qui doit contenir le résultat d'une opération en fonction des deux premières. Je veux que l'affichage soit instantané lorsque l'on modifie l'une ou l'autre des texbox.
    Je sais le faire en javascript, avec la propriété OnTextChanged de tête si je ne me trompe pas, appelé sur les deux textbox qui mettent à jour la troisième textbox.
    Ma question concerne les ids des texbox qui sont générés par l'asp, puis-je faire ce que j'ai précisé au dessus avec de l'asp éxécuté coté client (ca reviendrait à ce que ce soit l'asp qui me génére le javascript, ca me semble pas super comme idée) ou bien alors comment être sûr des noms de mes ids pour pouvoir intégrer ma fonction depuis une page javascript.

    Si je n'ai pas été assez clair n'hésitez pas à me poser des questions.


  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    Pour ton probleme, c'est a regler en javascript...

    Plutot que de bidouiller les ids, le mieux est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('<%= panelhazard.ClientID %>')
    Comme ca, tu auras le bon id a chaque fois

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Je ne connaissais pas le element.ClientID ^^

    Par contre je suis obligé de mettre mon code javascript dans ma page asp avec ceci non ? Je ne peux pas mettre ma fonction javascript dans un fichier séparer?

  4. #4
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Tu peux mettre ta fonction ds un fichier separer ayant comme paramettre le fieldset.ClientID
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Ca depends de comment tu fais ta fonction js...

    Si elle prends en parametre les controles, pas de pb.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function triggerPanel(chkboxId, panelId){
     
      if (document.getElementById(chkboxId).checked){
          document.getElementById(panelId).style.display="none";
      }else{
          document.getElementById(panelId).style.display="visible"; 
      }  
    }
    Et dans ton code c# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ishazard.Attributes.Add("OnClick", "triggerPanel('" + ishazard.ClientID + "', '" + panelhazard.ClientID + "')");

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Alors j'ai comme suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <asp:CheckBox ID="ishazard" runat="server" Checked="true" />
    ************
    ishazard.Attributes.Add("OnClick", "showHideHazardForm('" + ishazard.ClientID + "', '" + panelhazard.ClientID + "')");
    ************
    function showHideHazardForm(chkboxId, panelId){
        alert('appel fct'); //Pour etre sur que la fonction est bien appeler lors de mon click
        if (!document.getElementById(chkboxId).checked){
            document.getElementById(panelId).style.display="none";
        }else{
            document.getElementById(panelId).style.display="visible"; 
        }
    }
    Lorsque ma page se charge, ma checkbox est bien cochée.
    Je clique pour la décocher, j'ai la popup je clique sur ok, rien de se passe.
    Je reclique sur la checkbox, re-popup, et là le fieldset disparait et ma checkbox est donc cochée.
    Après je peux cocher/décocher autant de fois que je veux plus rien ne se passe.
    Il y a quelque chose qui doit m'échapper...

  7. #7
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Voila j'ai enfin réussis, après 2h de grosse prise de tête.
    Déjà je me suis aperçu pour une raison inconnue pour le moment que mes fonctions javascript n'arrivait pas à récupérer les éléments de ma page si elles sont dans un fichier js séparé mais dans le corps de ma page c'est bon.
    Donc pour l'instant je vais laisser comme ca, je regarderais cette partie plus tard (perdu beaucoup de temps à faire un truc très simple :p)

    Voici mon code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function ShowHideHazardForm(chkboxId, panelId)
    {
      if (!document.getElementById(chkboxId).checked){
        document.getElementById(panelId).style.visibility="hidden";
      }else{
        document.getElementById(panelId).style.visibility="visible"; 
      }
    }
    Avec dans ma fonction Page_Load:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panelhazard.Style.Add("visibility", "hidden");
    ishazard.Attributes.Add("OnClick", "ShowHideHazardForm('" + ishazard.ClientID + "', '" + panelhazard.ClientID + "')");
    Avec ceci mon fieldset disparait et réapparait à ma guise.
    J'ai changer display pour visibility car ca ne fonctionnait pas.

    Dans la foulée j'ai réussis la seconde partie de ma question originelle avec le même principe.

    Un grand merci à vous deux pour les idées avec le ClientID passé en paramètre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 41
    Dernier message: 23/01/2014, 16h30
  2. [MySQL] afficher les données précédentes en fonction d'une année de sélection
    Par vivi21 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 14/06/2011, 16h54
  3. Réponses: 0
    Dernier message: 09/09/2008, 21h53
  4. Cacher un element en fonction d'une valeur
    Par bossun dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 23/11/2007, 10h02
  5. Réponses: 2
    Dernier message: 13/12/2006, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo