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

JavaScript Discussion :

[DOM] Changement dynamique de l'image de fond d'une balise <TD>


Sujet :

JavaScript

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut [DOM] Changement dynamique de l'image de fond d'une balise <TD>
    J'ai créé un tableau et j'ai identifié une cellule en lui affectant un nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <TD Width	= '10%'
        Align	= 'Center'
        ID		= 'ID_1'	
        BackGround	= '../Images/Onglet_Actif.bmp'>
    Je voudrais pouvoir par programme modifier l'image de fond.
    J'ai donc écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID_1.style.backgroundImage = '../Images/Onglet_Inactif.bmp';
    Mais j'obtiens une erreur sur objet inconnu
    Pourtant cette ligne marche bien
    J'avoue que je ne comprends pas. Merci d'avance de votre conseil.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 141
    Points
    11 141
    Par défaut
    bonjour,

    dans un premier temps, je te déconseille d'utiliser des images bmp dans ton site web (elles sont trop lourdes à charger). Préfère les jpg, les gif ou les png. Il existe des petits programmes qui permettent les conversions d'un format à l'autre.

    Pour ton problème : prends l'habitude d'écrire en minuscules les balises et les attributs, utilise les feuilles de style pour la présentation des éléments.
    Le tout s'écrit sur une ligne.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td style="width:10%; text-align: center; background-image: url('../Images/Onglet_Actif.jpg')" id="id_1">

    en javascript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById("id_1").style.backgroundImage="../Images/Onglet_Inactif.jpg"
    Le javascript est sensible à la casse. Pour cibler un élément utiliser document.getElementById().

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Je sais que Javascript est sensible à la casse mais c'est vrai que je conserve l'habitude du Pascal de préfixer dès que que le peux les mots réservés par des majuscules.
    Mon problème n'est pas vraiment là

    Si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("id_1").style.backgroundImage="../Images/Onglet_Inactif.jpg"
    j'obtiens une erreur de programme Argument non valide.

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    background-image: url('../Images/Onglet_Actif.jpg')"
    L'image ne s'affiche plus.
    J'en étais resté à background-image au niveau des CSS et background au niveau de la balise TD

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Je sais que Javascript est sensible à la casse mais c'est vrai que je conserve l'habitude du Pascal de préfixer dès que que le peux les mots réservés par des majuscules.
    Le HTML n'a pourtant rien à voir avec Pascal/Delphi... Deux langages totalements distincts; deux ensembles de normes et standards distincts! Mais bon, c'est toi qui sait.

    La propriété <document.getElementById(id).style.backgroundColor> est bel et bien celle qu'il faut utiliser pour attribuer une nouvelle image de fond à ton objet. Ton erreur se trouve probablement ailleurs, autour de ce bout de code. Erreur de parsing peut-être, ou encore erreur de déclaration de l'ID...

    Si tu as laissé ton id équivalent à 'ID_1' comme ton exemple initial, et que tu tentes d'attribuer un background à 'id_1', ça ne fonctionnera pas (case sensitive...)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Correction: backgroundImage et non backgroundColor. Désolé!

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 141
    Points
    11 141
    Par défaut
    Citation Envoyé par Delphi-ne
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    background-image: url('../Images/Onglet_Actif.jpg')"
    L'image ne s'affiche plus.
    attention dans ta CSS tu as un " à la fin en trop

    Comme freekind, je pense qu'il y a une erreur dans ton script. Pour les styles, tu remarqueras que la syntaxe CSS est différente de la syntaxe Javascript.
    CSS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .monStyle{
      background-image: url("image.jpg");
    }
    Javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    getElementById("id_1").style.backgroundImage="image.jpg";
    Peux-tu poster une partie de ton code pour localiser l'erreur ?

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Je dois être un peu limité aujourd'hui
    Voici mon code
    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
    <html>
    	<head>
    		<script language="JavaScript">
    			function TRT_AfficheListe(pID){
    				alert(id_1.width);
    				getElementById(id_1).style.backgroundImage = ""
    			}
    		</script>
    	</head>
     
    	<body>
    		<table	width = '90%'
    			align = 'center'>
    			<tr>
    				<td width	= '50%'
    				    align	= 'center'
    				    id		= 'id_1'
    				    background	= '../Images/Onglet_Inactif.bmp'>
    					<a href	   = '#'
    					   onclick = 'TRT_AfficheListe()'>
    					   Accueil
    					</a>
    				</td>
    				<td width	= '50%'
    				    align	= 'Center'
    				    background	= '../Images/Onglet_Inactif.bmp'>
    					<a href	   = '#'
    					   onclick = 'TRT_AfficheListe()'>
    					   Test
    					</a>
    				</td>
    			</tr>
    		</table>
    	</body>
    </html>
    J'affiche bien le message concernant le width
    La ligne suivante plante.
    Je pense pourtant bien avoir respecté les instructions de vos messages

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Trois erreurs:

    - Tu ne passes aucun argument à ta fonction TRT_AfficheListe();
    - id_1 est considéré comme une variable quand tu le passes à la méthode getElementById() et non comme une chaîne référant à un ID de ton objet DOM

    - tu appelles seulement getElementById(), sans savoir de quelle classe d'objets la méthode provient. Il faut plutôt utiliser document.getElementById()...

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 141
    Points
    11 141
    Par défaut
    Citation Envoyé par freekind
    - tu appelles seulement getElementById(), sans savoir de quelle classe d'objets la méthode provient.
    C'est de ma faute Je lui ai fourni le code erroné. J'ajouterai aussi une quatrième erreur, mais là aussi c'est de ma faute
    Citation Envoyé par Auteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getElementById("id_1").style.backgroundImage="image.jpg";
    correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById("id_1").style.backgroundImage="url('image.jpg')";
    ------------------------------------
    donc voici le code corrigé (et testé)
    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
     
    <html>
    	<head>
    		<script type="text/javascript">
    		<!--
    			function TRT_AfficheListe()
                {
                    //declaration d'une variable element qui contiendra l'objet retourne par
                    //document.getElementById()
    		var element = document.getElementById("id_1");
                    element.style.backgroundImage = "url('image2.jpg')";
     
     
                    //autre syntaxe possible :
                    //document.getElementById("id_1").style.backgroundImage = "url('image1.jpg')";
    			}
    		//-->
    		</script>
    	</head>
     
    	<body>
    		<table style="width: 90%; text-align: center">
    			<tr>
    				<td style="width: 50%; text-align: center; background-image: url('image1.jpg')" id="id_1">
    					<a href='#' onclick="TRT_AfficheListe()">Accueil</a>
    				</td>
    				<td style="width: 50%; text-align: center; background-image: url('image1.jpg')">
    					<a href="#" onclick="TRT_AfficheListe()">Test</a>
    				</td>
    			</tr>
    		</table>
    	</body>
    </html>

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Ca marche parfaitement
    Merci beaucoup

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

Discussions similaires

  1. Changement image de fond d'une DIV
    Par Goltar dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/02/2013, 19h02
  2. image en fond dans une balise <option>
    Par samplaid dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 16/07/2008, 23h52
  3. Image de fond dans une balise div
    Par gids01 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 05/02/2007, 14h03
  4. Réponses: 6
    Dernier message: 21/09/2006, 17h33
  5. Réponses: 4
    Dernier message: 03/05/2005, 09h03

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