11486 sujets

JavaScript, DOM et API Web HTML5

Bonjour, j'aimerais créer une page qui ajoute une vidéo et qui la supprime lors d'un autre clique. Ce code m'affiche le message d'erreur : "Uncaught TypeError: Cannot read properties of null (reading 'remove')".

J'ai beau regarder sur internet comment cela fonctionne mais je ne le comprends toujours pas.



		let nb=0;
			function changeBackground2(bUrl) {
				var video = document.createElement("video");
				var div = document.getElementById("x");
				
				if (nb=0){
					nb++;
				}
				if (nb<1){
					div.remove(div);
				}

				video.autoplay='autoplay'
				video.loop='infinite'
				video.muted='muted'
				video.src = bUrl;
				div.appendChild(video);
			}
Modérateur
Bonjour,

La solution dépend du code html qu'on n'a pas dans la question. Donc ce qui suit n'est que supposition.

1) Le message d'erreur dit qu'apparement, au moment où la fonction changeBackground2() est exécutée, il n'y a pas (ou plus) d'élément ayant pour id la valeur 'x' dans la page.

2) Le code de la fonction changeBackground2() contient de multiples erreurs et est à revoir. En particulier, ce n'est pas if(nb=0) mais if(nb==0), ce n'est pas div.remove(div), mais video.remove(), et la gestion de la variable nb est erronée.

Il faut bien vérifier qu'on a un élément ayant pour id la valeur 'x' dans la page, et évidemment, il faut aussi qu'il y ait sur le serveur une vidéo qui a dans le code ci-dessous le nom 'a.mp4' mais ça peut être n'importe quel autre nom.

3.a) On suppose donc qu'il y a dans la page quelque part :
<div id='x'></div>

3.b) Un petit exemple complet (à adapter en fonction des besoins) :
<!DOCTYPE html>
<html>
<body>
<button onclick="changeBackground2('a.mp4')">Cliquez moi</button>
<div id='x'></div>
<script>
let nb=0;
function changeBackground2(bUrl) {
	// on récupère l'élément div ayant pour id 'x' et devant contenir la video
	let div = document.getElementById("x");
	if (nb==0) {
		// nb vaut 0, on crée la video et on l'affiche dans l'élément div
		let video = document.createElement("video");
		video.autoplay='autoplay'
		video.loop='infinite'
		video.muted='muted'
		video.src = bUrl;
		// on insère la video dans div
		div.appendChild(video);
		// on change la valeur de nb pour indiquer qu'on vient d'afficher la vidéo
		nb=1;
	}
	else {
		// nb vaut 1, la vidéo existe, et on peut la supprimer
		// on récupère l'élément video contenu dans div
		let video = div.querySelector('video');
		// on supprime l'élément video
		video.remove();
		// on change la valeur de nb pour indiquer qu'on vient de supprimer la vidéo
		nb=0;
	}
}
</script>
</body>
</html>

Amicalement,
Modifié par parsimonhi (20 Feb 2023 - 05:07)