11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

j'ai un petit problème qui commence à me tapper serieusement sur les nerfs Smiley decu
La partie de la page html qui est concerné...

...
    <script language="javascript" src="function.js">
    </script>
</head>
<body>
    <div id='global'>
        <div id='menu'>
            <script language="javascript">aff_masque_aff('c_menu');</script>
            <div id='c_menu' class='visi'>
                <?php include("p_menu.php"); ?>
            </div>
        </div>
...


Les classes visi et invis affiche ou cache le contenu d'un bloc.

Le fichier function.js est le suivant :

function aff(iddiv)
{
    iddiv.className='visi';
}

function masque(iddiv)
{
    iddiv.className='invis';
}

function aff_masque_aff(iddiv)
{
    if(document.getElementById(iddiv).className == "visi")
        document.write("<a onClick="+masque(iddiv)+" href='#' title='Masquer'>Masquer</a>");
    else
        document.write("<a onClick="+aff(iddiv)+" href='#' title='Afficher'>Afficher</a>");
}



- On entre bien dans la fonction aff_masque_aff
- Le paramètre est bien le bon
Problème :
- erreur : document.getElementById(iddiv) has no properties
sur cette ligne donc "if(document.getElementById(iddiv).className == "visi")".

Voila. Si quelqun trouve l'erreur bète que j'ai du laissé trainer.

Merci d'avance.
Bonjour,

Regarde déjà si tu as variable et bien envoyer dans tes fonctions. avec un alert. Si c'est pas le cas ... je sais pas Smiley lol car tout a l'air d'etre en ordre oO
Salut,

Tu fais référence à "c_menu" avant qu'elle n'apparaisse dans le code. Il y a donc peu de chances que cela fonctionne. Smiley smile
Modifié par Julien Royer (18 Jul 2007 - 10:55)
Merci pour vos réponces rapide

> Le paramètre est bien reçu dans la fontion.

> J'ai fait quelques modif pour ne pas faire réference à c_menu avant de le déclarer. Mais ca ne marchais toujours pas, j'ai donc fait quelques modif aussi dans mes fonction JS. Au final ca ne marche pas non plus Smiley decu Mais je sent que la solution est proche Smiley langue

index.php

...
    <script language="javascript" src="function.js">
    </script>
</head>
<body>
    <div id='global'>
        <div id='menu'>
            <div id='c_menu' class='invis'>
                <?php include("p_menu.php"); ?>
            </div>
            <script language="javascript">aff_masque_aff('c_menu');</script>
        </div>
...


function.js

function aff(iddiv)
{
   document.getElementById(iddiv).className='visi';
   alert("aff");
}

function masque(iddiv)
{
    document.getElementById(iddiv).className='invis';
    alert("mask");
}

function aff_masque_aff(iddiv)
{
    if(document.getElementById(iddiv).className == "visi")
        document.write("<a onClick=masque("+iddiv+") href='#' title='Masquer'>Masquer</a>");
    else
        document.write("<a onClick=aff("+iddiv+") href='#' title='Afficher'>Afficher</a>");
}


Edit :
La condition marche bien.
Affiche bien le bon lien seulon l'etat de la class de mon div.
Problème :
c_menu is undefined on line 1
Modifié par Orbiplanax (18 Jul 2007 - 12:08)
Orbiplanax a écrit :


(...)
        document.write("<a onClick=masque("+iddiv+") href='#' title='Masquer'>Masquer</a>");
    else
        document.write("<a onClick=aff("+iddiv+") href='#' title='Afficher'>Afficher</a>");
}



Ces lignes me semblent bizarres. iddiv est une chaîne de caractères. Donc le résultat produit devrait être par exemple

<a onClick=masque(c_menu) href='#' title='Masquer'>Masquer</a>

... et non pas

<a onClick="masque('c_menu')" href='#' title='Masquer'>Masquer</a>

Il est donc normal que c_menu soit undefined, puisqu'il est ici interprété comme une variable et non comme la chaîne de caractères "c_menu". Essaie d'échapper tes guillemets et apostrophes (résultat non garanti, mon ventre me tiraille un peu Smiley cligne ):

 document.write("<a onClick=\"masque(\'+iddiv+\')\" href='#' title='Masquer'>Masquer</a>");

Est-ce que ça marche?
Modifié par Gilles (18 Jul 2007 - 12:48)