Bonjour,
Je débute en JavaScript, (enfin pas réellement mais je viens tout juste de m'y remettre) et je suis tombé sur un petit soucis qui me casse bien la tête même s'il n'est pas bien complexe.

Ce que je fais

Je veux faire un petit Timer pour tester (en suivant le tutoriel de grafikart). Mais la boucle n'est pas appelée.
index.php

<!DOCTYPE html>
<html>
<head>
    <title>Test Timer</title>
</head>
<body>
    <span data-ago="<?= time() - 3600 ?>">Test</span>

    <script src="ago.js"></script>
</body>
</html>

ago.js

if(NodeList.prototype.forEach === undefined) {
    NodeList.prototype.forEach = function (callback) {
        [].forEach.call(this, callback);
    }
}

document.querySelectorAll('[data-ago]').forEach(function (node) {

    function setText() {
        console.log("Node !")//Aucun info n'est trouvée, donc le log n'est pas appelé !
    }
});

Je n'ai aucune erreur, seulement, rien ne s'affiche dans la console, pourtant lorsque que log en dehors du SelectorAll tout fonctionne.
Merci d'avance :p
Vinetos

3 réponses


betaWeb
Réponse acceptée

Salut,

Evidemment que rien ne t'es retourné : tu déclares ta fonction setText() dans le forEach, mais tu ne l'appelle nulle part...

document.querySelectorAll('[data-ago]').forEach(function (node) {
    function setText() {
        console.log("Node !")//Aucun info n'est trouvée, donc le log n'est pas appelé !
    }

    setText();
});

Quand c'est comme ça, met un point d'arret dans la closure... Tu verras que le pb ne vient pas du sélecteur

Vinetos
Auteur

Ah oui, je suis bête, j'ai oublié de l'appellée ! Merci :p