tp javascript - Sesamebox.fr

Transcription

tp javascript - Sesamebox.fr
TP JAVASCRIPT
IntegWEB - 2014-2015
Série N°1
Exercice 1 :
A) Construire une page Html avec un texte de votre choix. Ajouter le code nécessaire pour ouvrir une
boîte de message au chargement de la page. Le code JavaScript sera implanté directement dans la
balise <body>. Fichier trame HTML : Trame_TP1_Exo_1.html disponible sur le blog.
B) Ajouter ensuite le code nécessaire pour ouvrir une boite d’alerte lorsque l’opérateur clique sur le
document. Le code JavaScript sera implanté directement dans la balise <body>.
Pour mémoire : onload est l’événement activé au chargement de la page.
onclick est l’événement activé lorsque l’opérateur clique sur l’objet concerné.
C) Construire une nouvelle page Html ayant les mêmes fonctionnalités, mais en implantant les
gestionnaires d’événements à l’aide d’un code JavaScript placé dans la section <head> de la page.
Pour mémoire : Mise en place d’un gestionnaire d’événement avec JavaScript
document.onclick = function() { code javascript } ;
Autre forme d’écriture possible avec une fonction déclarée auparavant
document.onclick = NomFonction ;
// attention sans les ()
Cas particulier de l’événement onload
document.onload = NomFonction();
// on doit ajouter les (), car c’est un cas particulier du onload qui ne produit
// pas d’objet event
Exercice 2 : Gestion plus générale des événements sur les objets
L’objectif de cet exercice est d’assurer la gestion d’événements à l’aide de JavaScript en séparant le code
JavaScript du code HTML. Fichier trame HTML : Trame_TP1_Exo_2.html disponible sur le blog.
A ) Implantation de gestionnaires d’événements
Construire une page HTML avec :
• Une balise <div id=’D1’> </div> contenant du texte.
• Une balise <p id= ‘message’> </p> dans laquelle seront affichés des messages.
Ajouter ensuite en fin de code html une section "<script>" dans laquelle le code JavaScript sera implanté.
1) Ecrire la fonction Message(), qui assure l’affichage d’un message dans la balise <p> ayant pour
identifiant : ‘message’. Cette fonction sera appelée ensuite pas les fonctions associées aux
événements. On utilisera la méthode innerHTML pour modifier le contenu de la balise <p>.
Chaque événement déclenchera la modification du message contenu dans la balise <p>.
Les gestionnaires d’événements seront créés à l’aide d’un code JavaScript implanté en fin de page. Il sera
donc exécuté après le chargement de tous les éléments HTML de la page.
Afin de s’affranchir des problèmes de navigateur et de respecter la norme DOM-2 et d’avoir la possibilité
d’affecter plusieurs fonctions sur un même événement on utilisera les méthodes suivantes :
addEventListener() ou attachEvent() pour implanter les gestionnaires d’événements et
removeEventListener() ou detachEvent() pour les supprimer .(voir cours en ligne)
Ci-dessous : la fonction addEvent() qui assure l’ajout d’un gestionnaire d’événement sur un objet quel que
soit le navigateur et un exemple d’utilisation.
function addEvent(element, event, func) {
if (element.addEventListener) {
// l'élément possède la méthode addEventListener()
element.addEventListener(event, func, false);
} else {
// l'élément ne possède pas la méthode addEventListener()
element.attachEvent('on' + event, func);
}
}
Implantation d’un gestionnaire d’événement sur un objet avec id=’S1’ Avec la fonction addEvent()
// Récupération d’une référence sur l’objet div
Var LaDiv = document.getElementById(‘D1’) ;
// Création d'une fonction anonyme et récupération d'une référence sur cette fonction dans la variable UneFonction
var UneFonction = function() {alert("Vous m'avez cliqué !"); };
// Ajout de la fonction dans le gestionnaire d'événements de l'objet pour le click
addEvent( LaDiv , 'click' , UneFonction);
2) Implanter cette fonction dans la section <script>.
3) Ajouter le code JavaScript pour que le click sur la <div> affiche le message indiquant que
l’opérateur à cliqué sur la <div>. Ecrire une fonction anonyme assurant l’affichage du message et
également l’affichage de la valeur de l’id de la <div>.
Dans une fonction anonyme on peut faire référence à l’objet ayant généré l’événement avec la méthode
this. On peut donc récupérer la valeur de l’identifiant avec l’instruction suivante : this.id
4) Pour les événements onmouseover, onmouseout, ajouter des fonctions anonymes assurant l’affichage
des messages ‘entrée sur l’objet’ ou ‘sortie de l’objet’. Elles afficheront comme pour la question 3)
également la valeur de l’identifiant.
B) Ajout d’autres fonctions sur les événements
On souhaite modifier la couleur de la <div> lors de son survol par la souris. Ecrire les fonctions anonymes
assurant la modification de la classe CSS de l’objet ayant provoqué l’événement. Pour mémoire on utilise
la propriété className des objets pour modifier la classe. Les fonctions anonymes seront ensuite affectées
aux événement avec la fonction addEvent() des questions précédentes. Il faut également ajouter le code
CSS dans la section <head> définissant deux classes (état normal et état survolé).
Exemple de code css possible
<style type="text/css">
.normal{
width : 300px;
height : 100px;
background : yellow;
color : green;
border : 1px solid red;
border-radius: 10px;
}
.survol{
width : 300px;
height : 100px;
background : green;
color : yellow;
border : 1px solid red;
border-radius: 10px;
}
</style>
C) Ajout d’autres éléments sur la page
Nous avons créés des fonctions anonymes dans les questions précédentes, nous pouvons donc les associer à
d’autres objets.
Ajouter dans le code html une autre <div> avec pour identifiant ‘D2’, puis ajouter dans le code JavaScript
les instructions nécessaires pour que la nouvelle <div> réagisse aux événements comme la <div>
précédente.
Exercice 3 : Convertisseur
Construisez une page HTML contenant un convertisseur Francs  Euro.
Il comprend deux champs texte recevant les valeurs en francs ou en euros et deux blocs de type <span>
</span> dans lesquels les résultats de la conversion sont affichés.
Exemple de mise en page :
Fichier trame HTML : Trame_TP1_Exo_3.html disponible sur le blog.
Lors de la saisie d’une valeur dans un champ, à chaque frappe d’un chiffre, le résultat de la conversion sera
mis à jour. Les résultats des conversions seront formatés avec seulement deux chiffres après la virgule.
A vous de choisir le bon événement du clavier pour réaliser cette fonction.
A) Construisez le code html de la page.
B) Ecrivez les deux fonctions de conversion : des francs vers des euros et des euros vers des francs.
Elles assurent la conversion et l’affichage des résultats formatés dans les blocs <span> respectifs.
C) Implantez sur les deux champs de saisie les appels des fonctions de la question B.
Pour mémoire :
Syntaxe d’un champ texte : <input type= "texte" size="6" id= "TOTO" />
Syntaxe d’un bloc span : <span id="SP1" > </span>
Pour formater l’affichage d’un nombre décimal on utilise la méthode toFixed(Nombre de décimal) de l’objet
Number.
Exemple avec 2 chiffres après la virgule : Resultat = Resultat.toFixed(2) ;
Exercice 4 : Gestion de la date et de l’heure
Fichier trame HTML : Trame_TP1_Exo_4.html disponible sur le blog.
A) Construisez une page HTML avec un bloc texte dans lequel on affiche l’heure d’ouverture de la
page, en utilisant le format local d’affichage de l’heure (méthode toLocaleTimeString()). Cet
affichage sera géré à l’aide d’instructions JavaScript placées après la balise </body>.
B) Ajoutez sur la page, trois champs texte et un bouton. Un clic sur le bouton lance l’exécution d’une
fonction de mise à jour des trois champs contenant l’heure en heures, minutes, secondes (voir copie
d’écran ci-dessus).
C) Ajoutez sur la page un champ texte et un bouton. Un clic sur ce bouton lance l’exécution d’une
fonction qui affiche dans le champ, le temps écoulé en secondes depuis l’ouverture de la page.
Suggestion : utilisez la variable de lecture de l’heure utilisée dans la question A pour connaitre
l’heure d’ouverture de la page.
D) Rafraichissement automatique des affichages.
o Ajoutez deux boutons afin d’activer ou de stopper le mode de rafraichissement automatique des
affichages.
o Ecrivez la fonction assurant la mise à jour de tous les affichages.
o Ajoutez le code nécessaire pour lancer le timer sur le premier bouton
o Ajoutez le code pour supprimer le timer sur le second bouton.
Que ce passe t-il si on click plusieurs fois de suite sur le bouton [Auto] ?
Proposez une solution pour éviter ce problème.
E) Ajoutez le code html et JavaScript nécessaire pour afficher également la date au format local.
Pour mémoire :
Pour pouvoir utiliser l’objet Date il faut déclarer une variable et l’initialiser avec l’objet Date
Exemple : var H = new Date() ;
Syntaxe des différentes méthodes de l’objet Date :
Heure au format local = H.toLocaleTimeString();
Heure (0 à 23) = H.getHours();
Minute (0 à 59) = H.getMinutes();
Seconde (0 à 59) = H.getSeconds();
Temps absolu en ms = H.getTime(); ou H.getMilliseconds();
Date au format local = H.toLocaleDateString();
Jour du mois (1 à 31) = H.getDate();
Mois (0 à 11) = H.getMonth();
Année = H.getYear(); Attention sous Firefox, année à partir de 1900 sous IE Année sur 4 digits
Ou Année = H.getFullYear(); Toujours sur 4 digits
Méthode pour appeler une fonction après une temporisation :
Identifiant_Temporisateur = setTimeout("NomDeLaFonction()",50); 50 correspond à 50 ms.
Pour annuler ce temporisateur : clearTimeout(Identifiant_Temporisateur) ;
Méthode pour appeler une fonction régulièrement :
Identifiant_Temporisateur = setInterval(("NomDeLaFonction()",50);
Méthode pour arrêter un Temporisateur :
clearInterval(IdentifiantTemporisateur);
Identifiant_Temporisateur est une variable entière qui mémorise une référence sur le timer initialisé par les fonctions
setTimeout() ou setInterval() , cette variable est indispensable si on souhaite arrêter un timer.
MEMO
Intégration du code JavaScript dans l’entête :
Formatage des nombres décimaux :
<head>
var Resultat = 1.12345 ;
Resultat = Resultat.toFixed(2) ;
<script type="text/javascript">
// Commentaires
… Code JavaScript ici …
</script>
</head>
Resultat contient maintenant 1.12
Syntaxe d’une fonction :
Association événement sur un bouton :
function Nom_De_La_Fonction ( paramètres ) {
<input type="button" value="ACTION"
onclick="F_Action()"></input>
… instructions …
// si la fonction retourne une valeur
return( La_Valeur) ;
Nous avons ici un bouton avec le texte ACTION et qui
appel la fonction JavaScript F_Action() si on clic sur le
bouton.
}
Association événement au chargement de la page :
Ecriture de la date dans une variable :
<body onload="code javascript" >
On récupère l’événement onload et on l’associe à du
code JavaScript
var D = new Date() ;
Appel d’une fonction JavaScript sur un événement :
Récupération de la date et l’heure dans une chaine :
Exemple avec la fonction Ma_Fonction()
<body onload="Ma_Fonction()" >
var ChaineHeure = D.toLocaleTimeString() ;
var ChaineDate = D.toLocaleDateString() ;
Comment afficher une boite de message ?
Syntaxe des méthodes de lecture sur l’objet Date :
On utilise la fonction alert(Message)
Exemple :
alert("Bonjour…") ;
ou
var ChaineTexte = "Texte dans la chaine" ;
alert(ChaineTexte) ;
Heure au format local = D.toLocaleTimeString();
Heure (0 à 23) = D.getHours();
Minute (0 à 59) = D.getMinutes();
Seconde (0 à 59) = D.getSeconds();
Temps absolu en ms = D.getTime(); ou
D.getMilliseconds();
Comment récupérer l’événement du clic sur la page ?
Jour du mois (1 à 31) = D.getDate() ;
Mois (0 à 11) = H.getMonth() ;
Année sur 4 digits = D.getFullYear() ;
<body onclick="Code JavaScript" >
Code HTML d’un champ texte :
<input type="text" value="" size="50" id="XXX">
</input>
Avec ce code on obtient un champ texte, vide, d’une
largeur de 50 caractères avec comme identifiant ‘XXX’
Accès à la propriété value du champ texte :
Avec la méthode getElementById() de l’objet document
document.getElementById(‘XXX’).value
lecture :
A = document.getElementById(‘XXX’).value ;
Ecriture :
document.getElementById(‘XXX’).value=’ texte’ ;
Attention :
Année = D.getYear() ;
Attention sous FireFox, année à partir de 1900 mais
sous IE année sur 4 digits
Gestion des caractères ‘ ou " dans les chaines de
caractères :
On peu délimiter une chaines avec ‘ ou "
Chaine = ‘ texte avec des " dans la chaine ’ ;
Ou
Chaine = " texte avec un ‘ dans la chaine " ;
Ou concaténation de chaine pour les cas complexes :
Chaine = "texte avec un ‘ puis un " + ‘"’ + ‘dans la
chaine’ ;