Je suis nul en javascript

Résolu/Fermé
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 - 9 sept. 2022 à 22:42
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 - 10 sept. 2022 à 21:21

Bonjour,

J'ai un problème comme et pour toujours.

Je veux juste copier du contenu dans le presse-papier en javascript via un bouton et c'est tout.

Donc pour cela rien de plus simple, voici la partie js

const btnCopie = document.querySelector('.btn-copie');

btnCopie.addEventListener('click', (z) => {
  navigator.clipboard.setText(z.target.previousElementSibling.innerText);
  alert("Code copié !");
});

Et la partie html

<div class="code">
    <p>
        code
    </p>
    <button class="btn-copie">
        <img src="./img/code.jpg"/>
    </button>
</div>

Donc, en théorie quand je clique sur l'image le script va chercher l'élément dans la balise <p> appartenant à la div de class "code"

Mais rien ne se passe mdrr

Si vous avez une idée

3 réponses

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
10 sept. 2022 à 09:00

bonjour,

Ne serait-ce pas plus simple d'utiliser onclick?

https://www.delftstack.com/fr/howto/javascript/javascript-set-onclick/

0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
10 sept. 2022 à 09:15

Bonjour

Où est placé ton code js par rapport à ton html ?

Pourrais-tu montrer l'intégralité de ton code ?


0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023
Modifié le 10 sept. 2022 à 19:37

Il est placé dans le même dossier

J'ai vérifier un peu près 154 fois le lien, je suis sûr à 100% que ça vient pas de là.

Voilà mon code html complet et mon js tu l'a déjà complet au dessus

<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <meta name="color-scheme" content="light dark">
    <title>Index</title>
    <link rel="stylesheet" href="main.css">
    <link rel="icon" href=".\img\favicon.svg">
    <script src="clipboard.js"></script>
</head>
<body>
    <span class="page-title" id="index">Index</span>
    <div>
        <div class="product">
            <span class="title"># - 9</span>
            <span class="detail"><a href="#">Plus de détail</a></span>
            <input type="checkbox" hidden id="0">
            <label class="show" for="0" tabindex="0"></label>
            <div class="code">
                <p>
                    5cps
                </p>
                <button class="btn-copie">
                    <img src="./img/5cps.jpg"/>
                </button>
            </div>
        </div>
    </div>
</body>
</html>

Je suis en train de m'exploser mon crâne mais comme d'hab j'ai le sentiment que ça va être un truc à la con

0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
10 sept. 2022 à 19:58

Je pense savoir quelle est la cause de ton souci en général c'est toujours la même pour les débutants...

Tu as placé l'appel à ton script javascript dans le head de ton HTML.

Le problème, c'est que ton script s'exécute avant que ta page HTML ne soit formée...

Je t'invite à déplacer l'appel de ton script juste avant la fin de ton body.

C'est d'ailleurs une bonne pratique à conserver pour tes futurs développements.

0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 > jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024
10 sept. 2022 à 20:06
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <meta name="color-scheme" content="light dark">
    <title>Index</title>
    <link rel="stylesheet" href="main.css">
    <link rel="icon" href=".\img\favicon.svg">
</head>
<body>
    <span class="page-title" id="index">Index</span>
    <div>
        <div class="product">
            <span class="title"># - 9</span>
            <span class="detail"><a href="#">Plus de détail</a></span>
            <input type="checkbox" hidden id="0">
            <label class="show" for="0" tabindex="0"></label>
            <div class="code">
                <p>
                    5cps
                </p>
                <button class="btn-copie">
                    <img src="./img/5cps.jpg"/>
                </button>
            </div>
        </div>
    </div>
<script src="clipboard.js"></script>
</body>
</html>

J'ai fait comme tu as dit, donc comme ça ⬆️

Mais ça fonctionne toujours pas ????

0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649 > BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023
10 sept. 2022 à 21:07
console.log("fichier js chargé!");

const btnCopie = document.querySelector('.btn-copie');
const img = document.querySelector('.btn-copie > img');

btnCopie.addEventListener('click', (z) => {
   copyClip(z.target);
});

img.addEventListener('click', (z) => {
   copyClip(z.target.parentNode);
});

function copyClip(z){
  console.log(z);
  let p = z.previousElementSibling ;
  console.log(p);
  let text = p.textContent;
  console.log(text);
  navigator.clipboard.writeText(text);
  alert("Code copié !");
}
0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 > jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024
10 sept. 2022 à 21:21

Ça marche, merci beaucoup !!

0