Sujet 9

  1. Bienvenue au 9e sujet
  2. Révisions
    1. Fonctions fléchées: simplifier 1
    2. Fonctions fléchées: simplifier 2
    3. Fonctions fléchées: simplifier 3
    4. Fonctions fléchées: traduire 1
    5. Fonctions fléchées: traduire 2
    6. for ... of
    7. for ... of 2
    8. forEach
    9. forEach 2
    10. Bubbling
    11. Bubbling
    12. Bubbling
    13. Bubbling
  3. jQuery : introduction
    1. Listes jQuery
    2. liste jQuery: création 1
    3. liste jQuery: création 2
    4. Fonctions jQuery
    5. Fonction jQuery : show
    6. fonction jQuery: on
    7. fonction jQuery: on + hide
    8. .css()
    9. .css : traduction
    10. .css : traduction : left
  4. jQuery: Hello world
    1. .text()
    2. .text(): question
    3. Afficher « Hello world »
    4. Correction
    5. Cacher
    6. Correction
    7. .val()
    8. bouton .val()
    9. Cacher / montrer
    10. Correction
    11. Pos click
    12. Correction
  5. jQuery: Programmes courts
    1. Inscrits
    2. Click bouton
    3. Correction
    4. jQuery: Créer un élément
    5. Créer une ligne
    6. Correction
    7. Liste sélection
    8. Correction
    9. Élément courant
    10. DOM et liste jQuery / $(this)
    11. .addClass()
    12. .hasClass() et .removeClass()
    13. .hasClass() et .removeClass()
    14. Correction
  6. Code
    1. Click
    2. Correction
    3. nb
    4. chercher code
    5. Click et remplissage
    6. Correction
    7. 4 chiffres
    8. Correction
    9. Valider et effacer
    10. Correction
    11. preventDefault
    12. Accepter uniquement les chiffres
    13. Correction

1. Bienvenue au 9e sujet

1.1 Bienvenue au 9e sujet

Pour votre progression, c'est très important de finir le sujet précédent avant de commencer celui-ci.

Vous devez travailler connectés (lien « Connexion » en haut à droite de la page). Sinon, vous rencontrerez des problèmes d'avancement et vous risquez d'être comptés absent. En étant connectés vous retrouverez l'endroit où vous en étiez à la séance suivante.


2. Révisions

2.1 Révisions

Commençons par une rapide révision des notions des sujets précédents.

Révisions

2.2 Fonctions fléchées: simplifier 1

Rappel : fonctions fléchées

Simplifiez au maximum la fonction suivante:

function(){return window.location.href;}

Révisions

2.3 Fonctions fléchées: simplifier 2

Rappel : fonctions fléchées

Simplifiez au maximum la fonction suivante:

function(event){let n=event.target.parentNode;n.remove();return 'ok';}

Révisions

2.4 Fonctions fléchées: simplifier 3

Rappel : fonctions fléchées

Simplifiez au maximum la fonction suivante:

function(elA,elB){return elB.taille-elA.taille;}

Révisions

2.5 Fonctions fléchées: traduire 1

Rappel : fonctions fléchées

Transformez cette fonction fléchée en une fonction anonyme non fléchée

(x,y)=>x+y

Révisions

2.6 Fonctions fléchées: traduire 2

Rappel : fonctions fléchées

Transformez cette fonction fléchée en une fonction anonyme non fléchée

a=>a

Révisions

2.7 for ... of

let lis=document.querySelectorAll('li');
Utilisez une boucle for ... of  pour afficher tous les <li> en rouge.
Pour la boucle, utilisez une variable appelée li pour parcourir la NodeList lis

Révisions

2.8 for ... of 2

let noms=['Liam','Elya','Rose', ... ];
Utilisez une boucle for ... of  pour afficher tous les noms dans la console.
Pour la boucle, utilisez une variable appelée nom

Révisions

2.9 forEach

Utilisez une boucle forEach pour afficher en rouge tous les éléments de la page ayant class="important".
Écrivez-le en une seule ligne, sans créer de variable intermédiaire.
Utilisez une fonction fléchée, simplifiée aux maximum. Son paramètre sera appelé « i »


Révisions

2.10 forEach 2

let scores=[143,168,3895,294,335];
let m=0;

Utilisez une boucle forEach pour calculer dans la variable « m » le meilleur score.
Utilisez une fonction fléchée. Son paramètre sera appelé « s »
Indice: vous pouvez utiliser soit une condition « if » soit la fonction Math.max (voir doc).

Essayez dans la console avant de répondre.

Révisions

2.11 Bubbling

document.querySelector('div').addEventListener('click',()=>console.log('click'));

Sur quel(s) élément(s) est-ce que l'utilisateur peut cliquer pour afficher « click » sur la console ?

Révisions

2.12 Bubbling

document.querySelector('body').addEventListener('click',()=>console.log('click'));

(attention: le paramètre de querySelector a changé)
Sur quel(s) élément(s) est-ce que l'utilisateur peut cliquer pour afficher « click » sur la console ?

Révisions

2.13 Bubbling

document.querySelector('body').addEventListener('click',(event)=>console.log('click',event.target));

L'utilisateur clique sur le span.
A quel élément correspond event.target ?

Révisions

2.14 Bubbling

document.querySelector('body').addEventListener('click',function(event){console.log('click',this);});

L'utilisateur clique sur le span.
A quel élément correspond this ?

3. jQuery : introduction

3.1 ¤ jQuery : introduction

jQuery est une librairie JavaScript utilisée sur la grande majorité des sites web (77% en 2022).
Elle simplifie l'accès aux DOM.

JQuery logo.svg

jQuery est une librairie, c'est à dire des fonctions et des objets écrits par les développeurs de jQuery.
jQuery n'est pas fourni par votre navigateur, vous devez l'inclure, par exemple, comme ceci:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

L'accès à jQuery se fait par un raccourcis « $ ».
$ est à la fois une fonction et un objet.

jQuery : introduction

3.2 ¤ Listes jQuery

En jQuery on manipule en permanence des « listes jQuery »
Une liste jQuery contient une liste d'éléments DOM.
Vous pouvez l'imaginer comme un tableau d'éléments DOM, ou comme une NodeList.

En général, pour créer une liste jQuery, on appelle la fonction « $ » avec un sélécteur CSS:

$('.important') 

Ceci renvoie une liste jQuery contenant tous les éléments ayant class="important"

C'est très similaire à querySelectorAll:

document.querySelectorAll('.important')
Une liste jQuery est un objet. On peut la mettre dans une variable:

let a=$('.xyz');




jQuery : introduction

3.3 liste jQuery: création 1

Créez une liste jQuery contenant tous les paragraphes de la page

jQuery : introduction

3.4 liste jQuery: création 2

Créez une liste jQuery contenant l'élément ayant id="bouton"

jQuery : introduction

3.5 ¤ Fonctions jQuery

Une fois qu'on a une liste jQuery, on peut appeler une des nombreuses fonctions jQuery définies dessus. Il y en a plus de 140.
Les fonctions jQuery s'appliquent sur toute la liste... ce qui évite d'écrire des boucles. C'est très pratique ! 🙂

Exemple: fonction .hide()

Pour cacher tous les éléments ayant class="important"

$('.important').hide()

C'est l'équivalent de:

document.querySelectorAll('.important').forEach(d=>d.style.display='none');

Exemple: fonction .on()
Pour installer un gestionnaire d'événements sur tous les éléments ayant class="important"

$('.important').on('click',()=>console.log('bonjour'))

C'est l'équivalent de:

document.querySelectorAll('.important').forEach(d=>d.addEventListener('click',()=>console.log('bonjour')));
Variable

Si nécessaire, on peut mettre une liste jQuery dans une variable, puis appeler une fonction dessus. Par exemple, on peut décomposer :

$('.important').hide();

en :

let a=$('.important');
a.hide();

Comme vous le voyez, jQuery permet d'écrire simplement des choses qui seraient plus compliquées en DOM.

jQuery : introduction

3.6 Fonction jQuery : show

La fonction jQuery .show() permet d'afficher un élément qui est caché, par exemple, par .hide()
Que faut-il écrire pour afficher tous les éléments ayant class="important"

jQuery : introduction

3.7 fonction jQuery: on

<span>retour</span>
<span id="ok">Cliquez ici</span>
<p>Les actualités:</p>
<p class="important">Baisse des prix</p>
<p class="important">Pluie demain</p>
<p class="important">Vague de chaleur</p>

Quand l'utilisateur clique sur le span ok, affichez  « bonjour » dans la console.
Écrivez le jQuery, en utilisant une fonction fléchée, sans paramètre.

jQuery : introduction

3.8 fonction jQuery: on + hide

<span>retour</span>
<span id="ok">Cliquez ici</span>
<p>Les actualités:</p>
<p class="important">Baisse des prix</p>
<p class="important">Pluie demain</p>
<p class="important">Vague de chaleur</p>

Quand l'utilisateur clique sur le span ok, cachez tous les éléments ayant  class="important"
Écrivez le jQuery, en utilisant une fonction fléchée, sans paramètre.

jQuery : introduction

3.9 ¤ .css()

<p id="abc">exemple</p>

La fonction .css() permet de modifier l'attribut « style »:

Les trois approches suivantes ont le même résultat:

$('#abc').css('color','red');
document.getElementById('abc').style.color='red';
<p id="abc" style="color:red">exemple</p>

jQuery : introduction

3.10 .css : traduction

Traduisez la ligne suivante en jQuery

document.querySelectorAll('.xyz').forEach(d=>d.style.color='green');
Rappel:
Les fonctions jQuery s'appliquent sur toute la liste... ce qui évite d'écrire des boucles.

jQuery : introduction

3.11 .css : traduction : left

Traduisez la ligne suivante en jQuery

document.getElementById('popup').style.left='100px';

4. jQuery: Hello world

4.1 jQuery: Hello world

Créez le fichier suivant et vérifiez que le paragraphe s'affiche en rouge quand vous cliquez sur le titre.

exemple1.html:

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>exemple1</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>Ceci est un titre</h1>
<p>bla bla bla</p>
<script>
$('h1').on('click',function(){
$('p').css('color','red');
});
</script>
</body>
</html>

jQuery: Hello world

4.2 ¤ .text()

<span>abcd</span>

La fonction .text() permet d'accéder à textContent
Les deux lignes suivantes font la même chose:

$('span').text('defg');
document.querySelector('span').textContent='defg';

Et le span devient:

<span>defg</span>

jQuery: Hello world

4.3 .text(): question

<p>Bonjour</p>

Que faut-il écrire en jQuery pour remplacer « Bonjour » par « Au revoir » ?

jQuery: Hello world

4.4 Afficher « Hello world »

Reprenez exemple1.html et faites en sorte que le paragraphe affiche « Hello world » quand l'utilisateur clique sur le titre.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Hello world

4.5 Correction

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>exemple1</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>Ceci est un titre</h1>
<p>bla bla bla</p>
<script>
$('h1').on('click',function(){
$('p').css('color','red');
$('p').text('Hello world');
});
</script>
</body>
</html>

jQuery: Hello world

4.6 Cacher

Créez le fichier cacher.html:

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>exemple1</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<p><input type="button" value="cacher"/></p>
<p><img src="http://moodle.iutv.univ-paris13.fr/img/js/tux.png" alt="tux"/></p>
<script>
</script>
</body>
</html>
Quand l'utilisateur clique sur le bouton cachez l'image.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Hello world

4.7 Correction

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>exemple1</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<p><input type="button" value="cacher"/></p>
<p><img src="http://moodle.iutv.univ-paris13.fr/img/js/tux.png" alt="tux"/></p>
<script>
$('input').on('click',function(){
$('img').hide();
});
</script>
</body>
</html>

jQuery: Hello world

4.8 ¤ .val()

<input type="text" />

La fonction .val() permet d’accéder à la propriété value, par exemple, d'un champs texte.

Pour lire ce que l'utilisateur à tapé dans le champs texte:

let a=$('input').val();

Pour modifier le contenu du champs texte:

$('input').val('exemple');

C'est l'équivalent de:

let a=document.querySelector('input').value;
document.querySelector('input').value='exemple';

jQuery: Hello world

4.9 bouton .val()

<input type="button" value="cacher"/>
On peut lire et écrire le texte dans le bouton avec .val()

Que faut-il écrire pour que le bouton affiche "montrer" au lieu de "cacher" ?

jQuery: Hello world

4.10 Cacher / montrer

On voudrait que l'image du pingouin soit cachée lorsque l'utilisateur appuie sur le bouton. Ensuite le bouton devrait afficher « montrer ».
Quand l'utilisateur clique à nouveau, l'image est affichée et le bouton affiche à nouveau « cacher ».

       <=>  

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Hello world

4.11 Correction

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>exemple1</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<p><input type="button" value="cacher"/></p>
<p><img src="http://moodle.iutv.univ-paris13.fr/img/js/tux.png" alt="tux"/></p>
<script>
$('input').on('click',function(){
if($('input').val()==='cacher')
{
$('img').hide();
$('input').val('montrer');
}
else
{
$('img').show();
$('input').val('cacher');
}
});
</script>
</body>
</html>

jQuery: Hello world

4.12 Pos click

On va reprendre le fichier suivant vu au Sujet-1 :

pos-click-jq.html

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Pos click</title>
</head>
<body>
<p>
La souris se trouve à la position
x=<span id="affiche-x">?</span>,
y=<span id="affiche-y">?</span>
</p>
<script>
document.addEventListener('mousemove',fonction_a_appeler);
function fonction_a_appeler(event)
{
console.log('coucou',event.pageX,event.pageY);
let ax=document.querySelector('#affiche-x');
let ay=document.querySelector('#affiche-y');
ax.textContent=event.pageX;
ay.textContent=event.pageY;
}
</script>
</body>
</html>

Traduisez le en jQuery :

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Hello world

4.13 Correction

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Pos click</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<p>
La souris se trouve à la position
x=<span id="affiche-x">?</span>,
y=<span id="affiche-y">?</span>
</p>
<script>
$(document).on('mousemove',fonction_a_appeler);
function fonction_a_appeler(event)
{
console.log('coucou',event.pageX,event.pageY);
$('#affiche-x').text(event.pageX);
$('#affiche-y').text(event.pageY);
}
</script>
</body>
</html>

5. jQuery: Programmes courts

5.1 jQuery: Programmes courts

jQuery: Programmes courts

jQuery: Programmes courts

5.2 Inscrits

Créez le fichier suivant.

inscrits.html

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Inscrits</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<p>
<input id="nom" type="text" />
<input id="ajouter" type="button" value="ajouter" />
</p>
<h4>Inscrits:</h4>
<ul id="inscrits">
</ul>
<script>
</script>
</body>
</html>

jQuery: Programmes courts

5.3 Click bouton

En jQuery, affichez dans la console le nom tapé dans le champs texte, quand l'utilisateur clique sur le bouton.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Programmes courts

5.4 Correction

			$('#ajouter').on('click',function(){
console.log($('#nom').val());
});


jQuery: Programmes courts

5.5 ¤ jQuery: Créer un élément

Depuis le SUjet-1, en DOM, sans jQuery, pour créer un élément, on suivait les étapes suivantes:

(rappel et plus de détails)

En jQuery, on suit des étapes similaires.

jQuery: Programmes courts

5.6 Créer une ligne

En vous inspirant de ce qui a été vu précédemment pour le jQuery.
Quand l’utilisateur clique sur le nom:
1) Créez un élément <li>
2) Remplissez le avec le nom que l'utilisateur a tapé
3) insérez le <li> crée dans le <ul>

Ensuite, effacez le contenu du champs texte.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Programmes courts

5.7 Correction

			$('#ajouter').on('click',function(){
let ligne=$('<li></li>');
ligne.text($('#nom').val());
$('#inscrits').append(ligne);
$('#nom').val('');
});

jQuery: Programmes courts

5.8 Liste sélection

Créez le fichier liste-selection.html :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Liste sélection</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
.choisi
{
background-color: green;
color: white;
}
</style>
</head>
<body>
<ul id="choix">
<li>Fraise</li>
<li>Chocolat</li>
<li>Vanille</li>
<li>Pistache</li>
</ul>
<script>
</script>
</body>
</html>

En jQuery, affichez « click » dans la console quand l'utilisateur clique sur un <li>
(Sans utiliser de bubbling. Rappel: jQuery permet d'installer un gestionnaire d'événements sur tous les éléments d'une liste jQuery)

jQuery: Programmes courts

5.9 Correction

			$('li').on('click',function(){
console.log('click');
});

jQuery: Programmes courts

5.10 Élément courant

On voudrait changer la couleur de l'élément cliqué. Pour ça, il faut qu'on puisse, dans le gestionnaire d'événements, savoir quel élément a été cliqué.

Comment s'appelle, en DOM, sans jQuery, la variable contenant l'élément cliqué ?

jQuery: Programmes courts

5.11 ¤ DOM et liste jQuery / $(this)

Dans la variable « this » on a un élément DOM. On voudrait le manipuler avec jQuery.
Pour créer une liste jQuery à partir d'un élément DOM, il suffit d'appeler la fonction jQuery:

$(this)
On peut le faire aussi avec d'autres éléments:

const x=document.querySelector('p');
$(x).css('color','red');
Dans cet exemple, $(x) transforme un élément DOM x en une liste jQuery $(x)

jQuery: Programmes courts

5.12 ¤ .addClass()

La fonction jQuery .addClass() permet d'ajouter une classe aux éléments d'une liste jQuery.

Exemple:

<p>Tom</p>
<p>Liam</p>
$('p').addClass('exemple');
<p class="exemple">Tom</p>
<p class="exemple">Liam</p>

--

En tenant compte de ceci et de ce qu'on a vu à la page précédente, que faut-il taper pour ajouter la classe « choisi » à l'élément cliqué.
(Essayez dans votre programme avant de répondre)

jQuery: Programmes courts

5.13 ¤ .hasClass() et .removeClass()

La fonction .hasClass() permet de savoir si une classe est présente:

<p class="abc def'>bonjour</p>

$('p').hasClass('abc')  renvoie true
$('p').hasClass('xyz')  renvoie false

.removeClass() permet de supprimer une classe:

$('p').removeClass('abc')  transforme le paragraphe en ceci:

<p class="def'>bonjour</p>

jQuery: Programmes courts

5.14 .hasClass() et .removeClass()

Dans liste-selection.html, en utilisant .hasClass(), .addClass() et .removeClass(),
faites en sorte que l'utilisateur puisse sélectionner et désélectionner chaque choix en cliquant dessus.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

jQuery: Programmes courts

5.15 Correction

			$('li').on('click',function(){
if($(this).hasClass('choisi')){
$(this).removeClass('choisi');
}
else{
$(this).addClass('choisi');
}
});

6. Code

6.1 Code



Créez le fichier code.html suivant

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Code</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
#nombres
{
border-collapse: collapse;
margin-left: 1em;
}
#nombres td
{
border: 1px solid black;
width: 30px;
height: 30px;
text-align: center;
cursor: pointer;
user-select: none;
}
#nombres td:hover
{
background-color: #ffe;
}
</style>
</head>
<body>
<p>
<input id="code" type="text" maxlength="4"/>
<input id="valider" type="button" value="Valider" />
<input id="effacer" type="button" value="Effacer" />
</p>
<table id="nombres">
<tr><td>7</td><td>8</td><td>9</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>0</td><td></td><td></td></tr>
</table>
<script>
</script>
</body>
</html>


Code

6.2 Click

Quand l'utilisateur clique sur un <td>, affichez « click  » dans la console.

Code

6.3 Correction

			$('td').on('click',function(){
console.log('click');
});

Code

6.4 nb

Que faut-il écrire, dans le gestionnaire d'événements, pour mettre le nombre cliqué dans une nouvelle variable appelée « nb » ?
(on la gardera en chaîne de caractères, sans la transformer en entier)

Code

6.5 chercher code

Que faut-il taper en jQuery pour créer une variable « code » et y mettre le code se trouvant dans le champs texte.

Code

6.6 Click et remplissage

En utilisant ce que l'on vient de voir et la concaténation, faites en sorte qu'on puisse cliquer sur les nombres pour remplir un code dans le champs texte.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

Code

6.7 Correction

			$('td').on('click',function(){
let code=$('#code').val();
let nb=$(this).text();
$('#code').val(code+nb);
});

Code

6.8 4 chiffres

Faites en sorte de limiter le code cliqué à 4 chiffres.

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

Code

6.9 Correction

			$('td').on('click',function(){
let code=$('#code').val();
if(code.length>=4){return;}
let nb=$(this).text();
$('#code').val(code+nb);
});

Code

6.10 Valider et effacer

Si l'utilisateur clique sur effacer, effacez le contenu du champs texte.

Si l'utilisateur clique sur valider, affichez un alert indiquant « Ok » si le code vaut 1234 et « Code non valide » sinon.

Code

6.11 Correction

			$('#effacer').on('click',function(){
$('#code').val('');
});
$('#valider').on('click',function(){
let code=$('#code').val();
if(code!=='1234'){alert('Code non valide');}
else {alert('Ok!');}
});

Code

6.12 ¤ preventDefault

Les événements possèdent souvent des « actions par défaut ».

Par exemple :

On peut bloquer l'action par défaut avec la fonction event.preventDefault()

Par exemple:
Quand l'utilisateur clique sur le lien, rien ne se passe:

<a href="https://exemple.com">lien</a>
$('a').on('click',function(event){
    event.preventDefault();
});

Code

6.13 Accepter uniquement les chiffres

On voudrait empêcher l'utilisateur de taper autre chose que des chiffres dans le champs texte.

Ajoutez un gestionnaire d'événements keydown sur le champs texte.
Utilisez event.preventDefault() pour bloquer la saisie quand le caractère saisi n'est pas un chiffre

Rappels:

Écrivez le code, vérifiez qu'il fonctionne dans votre navigateur, puis copiez-le ici pour que votre enseignant puisse le relire plus tard:

Code

6.14 Correction

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Code</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
#nombres
{
border-collapse: collapse;
margin-left: 1em;
}
#nombres td
{
border: 1px solid black;
width: 30px;
height: 30px;
text-align: center;
cursor: pointer;
user-select: none;
}
#nombres td:hover
{
background-color: #ffe;
}
</style>
</head>
<body>
<p>
<input id="code" type="text" maxlength="4"/>
<input id="valider" type="button" value="Valider" />
<input id="effacer" type="button" value="Effacer" />
</p>
<table id="nombres">
<tr><td>7</td><td>8</td><td>9</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>0</td><td></td><td></td></tr>
</table>
<script>
$('td').on('click',function(){
let code=$('#code').val();
if(code.length>=4){return;}
let nb=$(this).text();
$('#code').val(code+nb);
});
$('#effacer').on('click',function(){
$('#code').val('');
});
$('#valider').on('click',function(){
let code=$('#code').val();
if(code!=='1234'){alert('Code non valide');}
else {alert('Ok!');}
});
$('#code').on('keydown',function(event){
if(event.key.length===1 && !/^[0-9]$/.test(event.key)){event.preventDefault();}
});
</script>
</body>
</html>