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 :

Affecter du javascript à toutes les TextBox


Sujet :

ASP.NET

  1. #1
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut Affecter du javascript à toutes les TextBox
    Bonjour !

    J'ai un formulaire et, dans un soucis de lisibilité, je veux que la textbox active soit mise en évidence. Pour cela il faut donc que je définisse le comportement javascript pour les évènements onBlur et onFocus. Bon, rien de bien compliqué.

    Mais comme je ne vais pas m'amuser à faire ça pour chaque textbox, je fais simplement une fonction récursive dans le CodeBehind qui va me faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    //Va servir à surligner le champ texte courant
    private string focusTxtBoxScript = "this.className='textbox_focus';";
    private string blurTxtBoxScript = "this.className='textbox_normal';";
     
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ajouterEvtJS(Page.Controls);
        }
    }
     
    // Parcourt récursivement les contrôles et
    // ajoute les évènements javascript suivants :
    // Onfocus sur les textbox > la textbox est surlignée
    // Onblur sur les textbox > la textbox est remise à la normale
    private void ajouterEvtJS(ControlCollection controls)
    {
        foreach (Control c  in controls)
        {
            if (c is TextBox)
            {
                ((TextBox)c).Attributes.Add("onfocus", this.focusTxtBoxScript);
                ((TextBox)c).Attributes.Add("onblur", this.blurTxtBoxScript);
            }
            else
            {
              if (c.HasControls()) 
                  ajouterEvtJS(c.Controls);
              else
                  return;
            }
        }
    }
    Cette fonction n'a rien de bien compliqué, mais ça ne fait strictement rien. En fait, elle ne semble même pas parcourir les contrôles de la page, puisque lorsque je regarde les contrôles passés en revue, je n'ai que le master form et un literalcontrol.
    A noter que quand j'appelle le "addatribute" directement sur une textbox, pas de problème. Cette page possède aussi une Master page.

    Quelqu'un a-t-il une idée de là où ça peut venir ? Ou bien une idée pour faire la chose autrement, s'il existe une meilleure façon ?


    Merci beaucoup !

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    un custom control me parait plus approprié non ?
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  3. #3
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    En effet ! Je n'y avais pas pensé, merci !

    Voici le code, pour ceux que ça intéresserait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace FosTennis_Classes.Composants_web
    {
        /// <summary>
        /// TextBox pour un formulaire plus lisible :
        /// Onfocus sur les textbox > la textbox est surlignée
        /// Onblur sur les textbox > la textbox est remise à la normale
        /// </summary>
        public class ActiveTextBox : System.Web.UI.WebControls.TextBox
        {
            public ActiveTextBox()
            {
                this.Attributes.Add("onfocus", "this.className='textbox_focus';");
                this.Attributes.Add("onblur", "this.className='textbox_normal';");
            }
        }
    }
    Pour le CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    .textbox_focus {
    	background:Beige;
    }
     
    .textbox_normal {
    	background:White;
    }
    Ceci dit, si quelqu'un sait pourquoi ce que j'avais fait au début ne fonctionne pas, je serais ravi de savoir

  4. #4
    Membre éprouvé
    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
    Par défaut
    Ton css marche sur les differents navigateurs ? IE7, IE8, FF et opera ?

  5. #5
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    Ok pour IE8, FF et Opera. Pas encore testé sous IE7, mais d'après ce que j'ai lu, l'attribut cssClass est supporté sans problème.

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

Discussions similaires

  1. [XL-2003] Supprimer toutes les textbox d"un classeur
    Par Sami Xite dans le forum Excel
    Réponses: 5
    Dernier message: 05/05/2016, 18h56
  2. [XL-2007] Vider toutes les TextBox et ComboBox
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2012, 21h38
  3. [WPF] Impossible d'écrire dans toutes les TextBox
    Par alex_vino dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 21/10/2010, 11h01
  4. appeler une javascript toutes les 5seconde?
    Par amine_en_france dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/12/2007, 12h11
  5. Comment désactiver toutes les textboxs d'une page ?
    Par harry25 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/08/2007, 16h58

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