11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour et bonne année 2018 à toutes et tous.
Voilà j'ai un petit soucis d'affichage avec mon code :
J'ai un formulaire et 2 boutons radios qui doivent m'afficher un formulaire distinct selon le choix.
Seulement ça n'affiche rien :

voici mon code :


<html dir="ltr">
<head>
<script  language="text/javascript">
 
function afficher_locataire()
{
    if(document.getElementById('oui').checked)
    {
          document.getElementById('divCacher').style.display="block";
          document.getElementById('divCacher2').style.display="none";
    }
    else if (document.getElementById('non').checked) 
    {
          document.getElementById('divCacher2').style.display="block";
          document.getElementById('divCacher').style.display="none"; 
    }
}
</script>
</head>
<body>
              <div class=" bd-headline-4">
            <div class="bd-container-inner">
                <h3>
                Locataire
                </h3>
            </div>
            </div>
            <table>
                <tr>
                    <td>
                        <input type="radio" name="choix" value="oui" onClick="afficher_locataire();" id="oui"/> Locataire existant
                        <input type="radio" name="choix" value="non" onClick="afficher_locataire();" id="non"/> Nouveau locataire
                    </td>
                </tr>
            </table>
                    <div id="divCacher" style="display:none;">
                        <input type="hidden" value="locataire_existe" name="loc1">
                        Locataire existant : Choisissez !!!
                    </div>
                    <div id="divCacher2" style="display:none;">
                        <input type="hidden" value="locataire_nouveau" name="loc2">
                        Nouveau locataire : Créez !!!
                    </div>

</body>
</html>


merci pour votre aide.
Cordialement.
Modérateur
Bonjour,

Etonnant ! Et ça méritait une petite enquête.

1) Quand on met dans une balise un attribut qui n'existe pas, il ne se passe rien. Du coup le code suivant marche et affichera "argh" dans la page :
<html>
<body>
<script toto="text/javascript">
document.write('argh');
</script>
</body>
</html>


2) La balise <script> a bien un attribut qui s'appelle "language", mais celui-ci est obsolète et ne devrait donc pas être utilisé. Mais si on l'utilise avec une valeur appropriée (ici "javascript"), ça marche encore. Par exemple le code suivant affichera "argh" dans la page :
<html>
<body>
<script language="javascript">
document.write('argh');
</script>
</body>
</html>


3) La valeur "text/javascript" n'est pas une valeur appropriée pour l'attribut "language". Et c'est la raison pour laquelle le code de la question initiale posée par jlblard ne marche pas. Par exemple, le code suivant n'affiche rien dans la page :
<html>
<body>
<script language="text/javascript">
document.write('argh');
</script>
</body>
</html>


4) Plus étonnant, la valeur "php" pour l'attribut "language" marche aussi s'il s'agit d'une page php (et à condition de mettre du code php entre les balises <script> et </script>). Par exemple le code suivant affichera "argh" dans la page :
<html>
<body>
<script language="php">
echo 'argh';
</script>
</body>
</html>


5) C'est l'attribut "type" (judicieusement suggéré par aliasdmc) qui doit être utilisé à la place de l'attribut "language". Par exemple le code suivant affichera "argh" dans la page :
<html>
<body>
<script type="text/javascript">
document.write('argh');
</script>
</body>
</html>


6) En html 5, l'attribut type a pour valeur par défaut "text/javascript" et peut donc être omis si le code entre les balises <script> et </script> est du javascript. Par exemple le code suivant affichera "argh" dans la page (notez la présence de <!doctype html> qui indique que la page est en html 5) :
<!doctype html>
<html>
<body>
<script>
document.write('argh');
</script>
</body>
</html>


7) Même si on oublie le doctype qui indique que la page est en html 5 (à savoir donc <!doctype html>), il y a fort à parier que les navigateurs supposeront que la balise script utilisée sans attribut fait du javascript. Par exemple le code suivant affichera "argh" dans la page :
<html>
<body>
<script>
document.write('argh');
</script>
</body>
</html>


En conclusion, si on fait du javascript, on peut se contenter d'utiliser simplement <script>.

Amicalement,
Modifié par parsimonhi (08 Jan 2018 - 23:33)
Modérateur
a écrit :
Même si on oublie le doctype qui indique que la page est en html 5 (à savoir donc <!doctype html>), il y a fort à parier que les navigateurs supposeront que la balise script utilisée sans attribut fait du javascript.

Oui, c'est parce que c'était le comportement par défaut de tous les navigateurs depuis pas mal d'années que ça a été mis dans la norme html5.

Quant au doctype, c'est pour des raisons de retro-compatibilité. Enfin, c'est pour Internet Explorer en vrai. Mais à terme il ne sert à rien et disparaitra (avec le-dit navigateur). Html 5 est la norme de-facto pour tous les navigateurs modernes.
Modifié par kustolovic (09 Jan 2018 - 08:59)
Bonjour,

2) La balise <script> a bien un attribut qui s'appelle "language", mais celui-ci est obsolète et ne devrait donc pas être utilisé.

Juste pour info : l'attribut language était déjà Deprecated en html4.0
Modérateur
aliasdmc a écrit :
Juste pour info : l'attribut language était déjà Deprecated en html4.0


Merci pour l'info. Justement, j'étais en train de me poser la question !

Amicalement,