<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaScript &#8211; s2prod ⋮</title>
	<atom:link href="https://s2prod.net/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://s2prod.net</link>
	<description>Pour les concepteurs de sites web</description>
	<lastBuildDate>Tue, 19 Mar 2024 11:23:22 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://s2prod.net/wp-content/uploads/2024/02/cropped-s2prod_icon512-32x32.png</url>
	<title>JavaScript &#8211; s2prod ⋮</title>
	<link>https://s2prod.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Comment afficher l&#8217;adresse IP de vos visiteurs avec JavaScript ?</title>
		<link>https://s2prod.net/comment-afficher-ladresse-ip-de-vos-visiteurs-avec-javascript/</link>
					<comments>https://s2prod.net/comment-afficher-ladresse-ip-de-vos-visiteurs-avec-javascript/#comments</comments>
		
		<dc:creator><![CDATA[s2prod]]></dc:creator>
		<pubDate>Tue, 14 Mar 2023 15:31:12 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Adresse IP Javascript]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[tuto]]></category>
		<guid isPermaLink="false">https://s2prod.net/?p=489</guid>

					<description><![CDATA[La question peut paraître saugrenue, pourquoi utiliser JavaScript alors qu&#8217;on peut le faire facilement avec Php ? Dans mon cas de figure, c&#8217;était un projet « Full JS » et je devais trouver un moyen d&#8217;obtenir l&#8217;adresse IP du visiteur du site à travers JavaScript. Utiliser une API pour afficher l&#8217;adresse IP en JavaScript C&#8217;est probablement la [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>La question peut paraître saugrenue, pourquoi utiliser <strong><a href="https://s2prod.net/javascript/" data-type="category" data-id="21">JavaScript </a></strong>alors qu&rsquo;on peut le faire facilement avec <a href="https://s2prod.net/php/" data-type="category" data-id="20"><strong>Php</strong></a> ? </p>



<p>Dans mon cas de figure, c&rsquo;était un projet « Full JS » et je devais trouver un moyen d&rsquo;<strong>obtenir l&rsquo;adresse IP du visiteur du site à travers JavaScript</strong>.</p>



<div class="gutentoc tocactive nostyle"><div class="gutentoc-toc-wrap"><div class="gutentoc-toc-title-wrap"><div class="gutentoc-toc-title">Sommaire</div><div id="open" class="toggletwo">show</div></div><div id="toclist"><div class="gutentoc-toc__list-wrap"><ul class="gutentoc-toc__list"><li><a href="#utiliser-une-api-pour-afficher-ladresse-ip-en-javascript">Utiliser une API pour afficher l&rsquo;adresse IP en JavaScript</a></li><li><a href="#utiliser-php-pour-créer-une-fonction-javascript-qui-retourne-ladresse-ip">Utiliser Php pour créer une fonction JavaScript qui retourne l&rsquo;adresse IP</a></li><ul class="gutentoc-toc__list"><li><a href="#afficher-les-coordonnées-gps-et-la-ville-de-vos-visiteurs">Afficher les coordonnées GPS et la ville de vos visiteurs</a></li></ul><li><a href="#conclusion">Conclusion</a></li></ul></div></div></div></div>



<h2 class="wp-block-heading" id="utiliser-une-api-pour-afficher-ladresse-ip-en-javascript">Utiliser une API pour afficher l&rsquo;adresse IP en JavaScript</h2>



<p>C&rsquo;est probablement la méthode la plus simple (sur papier).</p>



<p>Il existe pléthore d&rsquo;API qui permettent d&rsquo;<strong>afficher l&rsquo;adresse IP des visiteurs de votre site</strong> et même bien plus, comme la <strong>latitude </strong>et le <strong>longitude</strong>, la <strong>région</strong>, la <strong>ville </strong>…</p>



<p>L&rsquo;une des plus connues est <a href="https://www.ipify.org/" target="_blank" rel="noreferrer noopener nofollow">ipify.org</a>. <strong>Ipify </strong>est la plus connue et probablement la plus utilisée car elle propose une offre gratuite et simple  à intégrer qui permet <strong>1000 requêtes par mois</strong>, à l&rsquo;instar de son concurrent <a href="https://ipapi.com/" target="_blank" rel="noreferrer noopener nofollow">ipapi.com</a>.</p>



<p>Pour afficher l&rsquo;adresse IP d&rsquo;un visiteur en JavaScript avec ipify, il suffit d&rsquo;utiliser le code ci-dessous: </p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// Il faut préalablement s'inscrire sur ipify avant d'utiliser ce code
&lt;script type="application/javascript">
  function getIP(json) {
    document.write("My public IP address is: ", json.ip);
  }
&lt;/script>

&lt;script type="application/javascript" src="https://api.ipify.org?format=jsonp&amp;callback=getIP">&lt;/script></pre>



<p>Sauf que <strong>1000 requêtes c&rsquo;est peanuts </strong>! Et très rapidement votre appel à l&rsquo;API ne fonctionnera plus.</p>



<h2 class="wp-block-heading" id="utiliser-php-pour-créer-une-fonction-javascript-qui-retourne-ladresse-ip">Utiliser Php pour créer une fonction JavaScript qui retourne l&rsquo;adresse IP</h2>



<p>Il est plus que probable qu&rsquo;un codeur expérimenté 🤓 rira en voyant ce hack, mais à mon niveau je l&rsquo;ai trouvé excellent et <strong>incroyablement simple à mettre en place</strong>.  Le simple fait de modifier l&rsquo;en-tête a permis de rendre cela possible ! </p>



<p>Pour se faire, vous devez créer un fichier <strong>ip.php</strong> (vous pouvez le nommer comme vous le souhaiter) et nous allons y coller le code ci-dessous :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="ip.php" data-enlighter-group="">&lt;?php
     header("Content-type: text/javascript");
?>
function getIPAddress(){ return "&lt;?php echo $_SERVER['REMOTE_ADDR']; ?>"; }</pre>



<p>Vous n&rsquo;avez plus qu&rsquo;à appeler cette page avec les balises script </p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- Remplacez mon-chemin par le chemin où se trouver votre fichier -->   
&lt;script type="text/javascript" src="mon-chemin/ip.php">&lt;/script>
</pre>



<p>Il ne vous reste plus qu&rsquo;à appeler la fonction <strong>getIpAddress()</strong> à l&rsquo;endroit où vous souhaitez afficher l&rsquo;ip de vos visiteurs.</p>



<p>En l&rsquo;état le code fonctionne parfaitement. Le seul bémol si vous l&rsquo;avez testé, est que le fichier <strong>ip.php</strong> affiche la fonction en clair, et pour cause, c&rsquo;est du javascript. </p>



<p>Autre point négatif, <strong><a href="https://www.tout-le-web.com" target="_blank" rel="noreferrer noopener">tout le web</a> peut appeler la fonction getIPAddress() </strong>en faisant un lien vers cette page. Je doute que vous ayez envie de jouer les <span title="Content Delivery Network">CDN</span>.  L&rsquo;idéal est donc de rajouter une petite condition pour que <strong>le script s&rsquo;exécute uniquement depuis votre nom de domaine</strong>.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="ip.php" data-enlighter-group="">&lt;?php
// Remplacer s2prod.net par votre propre nom de domaine
if($_SERVER['HTTP_HOST'] === 's2prod.net') {
  header("Content-type: text/javascript");
?>
function getIPAddress(){ return "&lt;?php echo $_SERVER['REMOTE_ADDR']; ?>"; }
&lt;?php
} else {
  header("HTTP/1.1 403 Forbidden");
}
?></pre>



<h3 class="wp-block-heading" id="afficher-les-coordonnées-gps-et-la-ville-de-vos-visiteurs">Afficher les coordonnées GPS et la ville de vos visiteurs</h3>



<p>Si vous souhaitez afficher les <strong>coordonnées latitude, longitude</strong> ou même<strong> la ville</strong>, vous pouvez utiliser l&rsquo;objet <a href="https://developer.mozilla.org/fr/docs/Web/API/Navigator" target="_blank" rel="noreferrer noopener">Navigator </a>de JavaScript. Il faudra cependant faire appel à une <strong>API de géocodage inversé</strong> comme <a href="https://nominatim.org/" target="_blank" rel="noreferrer noopener"><strong>Nomimatim</strong></a>, qui a la bonne idée d&rsquo;être gratuite et relativement précise.</p>



<p>⚠️ Attention, pour que l&rsquo;appel fonctionne, il faut que votre visiteur <strong>accepte la géolocalisation</strong>, dans le cas contraire, cela générera une erreur.</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="401" height="274" src="https://s2prod.net/wp-content/uploads/2023/03/geolocalisation.png" alt="" class="wp-image-490" srcset="https://s2prod.net/wp-content/uploads/2023/03/geolocalisation.png 401w, https://s2prod.net/wp-content/uploads/2023/03/geolocalisation-300x205.png 300w" sizes="(max-width: 401px) 100vw, 401px" /></figure>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(
    function (position) {
      const lat = position.coords.latitude;
      const lng = position.coords.longitude;

      // Appelle l'API de géocodage inversé de Nominatim
      fetch(
        `https://nominatim.openstreetmap.org/reverse?format=jsonv2&amp;lat=${lat}&amp;lon=${lng}`
      )
        .then((response) => response.json())
        .then((data) => {
          // Récupère le nom de la ville à partir des données renvoyées par l'API
          const ville =
            data.address.city|| data.address.town || data.address.village;
          document.write(`Vous êtes à ${ville}!`);
        })
        .catch((error) => document.write(error));
    },
    function (error) {
      document.write(error);
    }
  );
} else {
  document.write(
    "La géolocalisation n'est pas prise en charge par votre navigateur"
  );
}
</pre>



<h2 class="wp-block-heading" id="conclusion">Conclusion</h2>



<p>L&rsquo;appel à une<strong> API gratuite et limitée</strong> peut servir dans certains cas de figure. Personnellement je préfère la méthode fait maison pour <strong>obtenir l&rsquo;adresse IP</strong> en modifiant l&rsquo;en-tête avec PHP. <strong>Aucune limitation et simple à mettre à œuvre</strong>. Concernant les autres données, il faudra utiliser l&rsquo;objet <strong>Navigator </strong>qui devrait faire l&rsquo;objet d&rsquo;une autorisation du visiteur contrairement à l&rsquo;usage d&rsquo;une API externe.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://s2prod.net/comment-afficher-ladresse-ip-de-vos-visiteurs-avec-javascript/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Générateur de mot passe en JavaScript généré par ChatGPT</title>
		<link>https://s2prod.net/generateur-mot-de-passe-javascript-chatgpt/</link>
					<comments>https://s2prod.net/generateur-mot-de-passe-javascript-chatgpt/#comments</comments>
		
		<dc:creator><![CDATA[s2prod]]></dc:creator>
		<pubDate>Thu, 26 Jan 2023 15:04:24 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Générateur de mot passe]]></category>
		<category><![CDATA[Intelligence Artificielle]]></category>
		<category><![CDATA[OpenAI]]></category>
		<guid isPermaLink="false">https://s2prod.net/?p=466</guid>

					<description><![CDATA[Vous le savez sûrement mais au-delà des échanges textuels, l&#8217;IA de chatGPT peut générer du code, le commenter et surtout l&#8217;expliquer. Je lui ai donc demandé de me transmettre un code en Vanilla JavaScript, HTML et CSS afin de créer un générateur de mot passe aléatoire. Pour les impatients, vous pouvoir le démonstration du code [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Vous le savez sûrement mais au-delà des échanges textuels, l&rsquo;IA de <a href="https://chat.openai.com/" target="_blank" rel="noreferrer noopener">chatGPT</a> peut générer du code, le commenter et surtout l&rsquo;expliquer.</p>



<p>Je lui ai donc demandé de me transmettre un code en Vanilla JavaScript, HTML et CSS afin de créer un générateur de mot passe aléatoire.</p>



<p>Pour les impatients, vous pouvoir le démonstration du code <a href="https://s2prod.net/playground/generateur-mot-de-passe.html" target="_blank" rel="noreferrer noopener nofollow">ici</a> et copier le <a href="#6-code-final">ici</a></p>



<div class="gutentoc tocactive nostyle"><div class="gutentoc-toc-wrap"><div class="gutentoc-toc-title-wrap"><div class="gutentoc-toc-title">Sommaire</div><div id="open" class="toggletwo">show</div></div><div id="toclist"><div class="gutentoc-toc__list-wrap"><ul class="gutentoc-toc__list"><li><a href="#1-contextualisez-votre-demande-à-chatgpt">1. Contextualisez votre demande à ChatGPT</a></li><li><a href="#2-affinez-votre-demande-à-chatgpt">2. Affinez votre demande à ChatGPT</a></li><li><a href="#3-ajout-de-fonctionnalités-au-code-initial">3. Ajout de fonctionnalités au code initial</a></li><li><a href="#5-ajoutez-un-peu-de-style-au-générateur-avec-css">5. Ajoutez un peu de style au générateur avec CSS</a></li><li><a href="#6-code-final-généré-par-chatgpt">6. Code final généré par ChatGPT</a></li><li><a href="#7-conclusion">7. Conclusion</a></li></ul></div></div></div></div>



<h2 class="wp-block-heading" id="1-contextualisez-votre-demande-à-chatgpt">1. Contextualisez votre demande à ChatGPT</h2>



<pre class="wp-block-code"><code>Tu es un développeur web et tu dois me créer un générateur de mot de passe en javascript
</code></pre>



<p>Voici un exemple de générateur de mot de passe en JavaScript :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function generatePassword(length) {
  var password = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";

  for (var i = 0; i &lt; length; i++) {
    password += possible.charAt(Math.floor(Math.random() * possible.length));
  }
  return password;
}
</pre>



<p>Cette fonction prend en paramètre la longueur souhaitée pour le mot de passe et retourne un mot de passe aléatoire généré en utilisant les caractères possibles définis dans la variable « possible ». Vous pouvez également ajouter ou supprimer des caractères à cette variable pour personnaliser les caractères utilisés pour générer le mot de passe.</p>



<h2 class="wp-block-heading" id="2-affinez-votre-demande-à-chatgpt">2. Affinez votre demande à ChatGPT</h2>



<pre class="wp-block-code"><code>Peux-tu me créer un formulaire qui exécutera cette fonction et qui affichera le mot de passe généré
</code></pre>



<p>Voici un exemple de formulaire HTML qui exécute la fonction de générateur de mot de passe lorsque l&rsquo;utilisateur soumet le formulaire, et qui affiche le mot de passe généré dans une zone de texte :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form onsubmit="generateAndDisplayPassword()">
  &lt;label for="length">Entrez la longueur souhaitée pour le mot de passe :&lt;/label>
  &lt;input type="number" id="length" name="length" min="1">
  &lt;input type="submit" value="Générer le mot de passe">
&lt;/form>

&lt;br>

&lt;textarea id="password" readonly>&lt;/textarea>

&lt;script>
  function generateAndDisplayPassword() {
    var length = document.getElementById("length").value;
    var password = generatePassword(length);
    document.getElementById("password").innerHTML = password;
  }
  
  function generatePassword(length) {
  var password = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";

  for (var i = 0; i &lt; length; i++) {
    password += possible.charAt(Math.floor(Math.random() * possible.length));
  }
  return password;
  }
&lt;/script>
</pre>



<p>Ce code crée un formulaire qui demande à l&rsquo;utilisateur de saisir la longueur souhaitée pour le mot de passe. Lorsque l&rsquo;utilisateur soumet le formulaire en cliquant sur le bouton « Générer le mot de passe », la fonction « generateAndDisplayPassword » est exécutée. Cette fonction utilise la longueur saisie par l&rsquo;utilisateur pour générer un mot de passe en utilisant la fonction de générateur de mot de passe définie, puis affiche le mot de passe généré dans la zone de texte avec l&rsquo;ID « password ».</p>



<p><em>Le code me paraît tout à fait cohérent par rapport au peu d&rsquo;information que je lui ai fourni, je m&rsquo;étonne juste de l&rsquo;utilisation de var au lieu de let pour la déclaration des variables, mais cela peut être un choix de compatibilité avec les anciens navigateurs.</em></p>



<h2 class="wp-block-heading" id="3-ajout-de-fonctionnalités-au-code-initial">3. Ajout de fonctionnalités au code initial</h2>



<pre class="wp-block-code"><code>Peux tu ajouter dans le code qui permet de prévenir du comportement par défaut des formulaires
</code></pre>



<p>Oui, voici à quoi pourrait ressembler le code HTML avec la prévention du comportement par défaut des formulaires :</p>



<p></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form onsubmit="generateAndDisplayPassword(); return false;">
  &lt;label for="length">Entrez la longueur souhaitée pour le mot de passe :&lt;/label>
  &lt;input type="number" id="length" name="length" min="1">
  &lt;input type="submit" value="Générer le mot de passe">
&lt;/form>

&lt;br>

&lt;textarea id="password" readonly>&lt;/textarea>

&lt;script>
  function generateAndDisplayPassword() {
    var length = document.getElementById("length").value;
    var password = generatePassword(length);
    document.getElementById("password").innerHTML = password;
  }
  
  function generatePassword(length) {
  var password = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";

  for (var i = 0; i &lt; length; i++) {
    password += possible.charAt(Math.floor(Math.random() * possible.length));
  }
  return password;
  }
&lt;/script>
</pre>



<p>La ligne « onsubmit = »generateAndDisplayPassword(); return false; » dans l&rsquo;élément &lt;form&gt; est ce qui prévient le comportement par défaut des formulaires. Lorsque l&rsquo;utilisateur soumet le formulaire, la fonction « generateAndDisplayPassword » est d&rsquo;abord exécutée, puis « return false » empêche le navigateur de soumettre le formulaire. Cela évite que la page ne soit actualisée et que les données saisies dans le formulaire ne soient perdues.</p>



<p>Je vous invite à vérifier que cette solution est adaptée à votre projet. Si cela ne répond pas à vos besoins, il existe d&rsquo;autres méthodes pour prévenir le comportement par défaut des formulaires en javascript, comme <code>event.preventDefault()</code>.</p>



<p><em>Je suis étonné qu&rsquo;il ne m&rsquo;ait pas proposé comme choix par défaut event.preventDefault() qui davantage utilisé de nos jours.</em></p>



<pre class="wp-block-code"><code>Peux tu ajouter un message d'erreur si le champ longueur du mot de passe n'est pas renseigné</code></pre>



<p>Voici comment le code HTML pourrait être modifié pour afficher un message d&rsquo;erreur si le champ de longueur de mot de passe n&rsquo;est pas renseigné :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form onsubmit="return generateAndDisplayPassword();">
  &lt;label for="length">Entrez la longueur souhaitée pour le mot de passe :&lt;/label>
  &lt;input type="number" id="length" name="length" min="1" required>
  &lt;input type="submit" value="Générer le mot de passe">
&lt;/form>

&lt;br>

&lt;textarea id="password" readonly>&lt;/textarea>
&lt;button id="copy-button" onclick="copyPassword()">Copier le mot de passe&lt;/button>

&lt;div id="error-message" style="color: red;">&lt;/div>

&lt;script>
  function generateAndDisplayPassword() {
    var length = document.getElementById("length").value;
    if(!length) {
        document.getElementById("error-message").innerHTML = "Veuillez entrer une longueur pour le mot de passe";
        return false;
    }
    var password = generatePassword(length);
    document.getElementById("password").innerHTML = password;
    return true;
  }
  
  function generatePassword(length) {
  var password = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";

  for (var i = 0; i &lt; length; i++) {
    password += possible.charAt(Math.floor(Math.random() * possible.length));
  }
  return password;
  }
  
  function copyPassword() {
    var password = document.getElementById("password");
    password.select();
    document.execCommand("copy");
    alert("Mot de passe copié dans le presse-papiers!");
  }
&lt;/script>
</pre>



<p>Ce code ajoute une validation du champ de longueur du mot de passe dans la fonction « generateAndDisplayPassword » en utilisant l&rsquo;opérateur <code>!</code> pour vérifier si le champ de longueur de mot de passe est vide ou non (<code>if(!length)</code>). Si le champ de longueur de mot de passe est vide, un message d&rsquo;erreur est affiché dans un élément de div avec l&rsquo;ID « error-message » et la fonction retourne <code>false</code> pour empêcher la soumission du formulaire. Si le champ de longueur de mot de passe n&rsquo;est pas vide, la fonction continue de générer et d&rsquo;afficher le mot de passe, puis retourne <code>true</code>.</p>



<p>Note: Il est possible de utiliser l&rsquo;attribut <code>required</code> sur l&rsquo;input de type <code>number</code> pour vérifier que le champ est rempli lorsque le formulaire est soumis, cela évitera l&rsquo;utilisation d&rsquo;une fonction.</p>



<pre class="wp-block-code"><code>Peux-tu ajouter des checkboxes pour séparer les lettres minuscules, les lettres majuscules, les nombres, les caractères spéciaux. Afin que l'utilisateur puisse lui même choisir la complexité du mot de passe</code></pre>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html lang="en">
&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;title>Document&lt;/title>
&lt;/head>
&lt;body>
    &lt;form onsubmit="return generateAndDisplayPassword();">
        &lt;label for="length">Entrez la longueur souhaitée pour le mot de passe :&lt;/label>
        &lt;input type="number" id="length" name="length" min="1" required>
        &lt;br>
        &lt;input type="checkbox" id="lowercase" name="lowercase" checked>
        &lt;label for="lowercase">Inclure des minuscules&lt;/label>
        &lt;br>
        &lt;input type="checkbox" id="uppercase" name="uppercase" checked>
        &lt;label for="uppercase">Inclure des majuscules&lt;/label>
        &lt;br>
        &lt;input type="checkbox" id="numbers" name="numbers" checked>
        &lt;label for="numbers">Inclure des chiffres&lt;/label>
        &lt;br>
        &lt;input type="checkbox" id="special" name="special" checked>
        &lt;label for="special">Inclure des caractères spéciaux&lt;/label>
        &lt;br>
        &lt;input type="submit" value="Générer le mot de passe">
      &lt;/form>
      
      &lt;br>
      
      &lt;textarea id="password" readonly>&lt;/textarea>
      &lt;button id="copy-button" onclick="copyPassword()">Copier le mot de passe&lt;/button>
      
      &lt;div id="error-message" style="color: red;">&lt;/div>
      
      &lt;script>
        function generateAndDisplayPassword(event) {
          event.preventDefault();
          var length = document.getElementById("length").value
       if(!length) {
              document.getElementById("error-message").innerHTML = "Veuillez entrer une longueur pour le mot de passe";
              return false;
          }
          var lowercase = "abcdefghijklmnopqrstuvwxyz";
          var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
          var numbers = "0123456789";
          var special = "!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";
          var possible = "";
          if(document.getElementById("lowercase").checked) {
              possible += lowercase;
          }
          if(document.getElementById("uppercase").checked) {
              possible += uppercase;
          }
          if(document.getElementById("numbers").checked) {
              possible += numbers;
          }
          if(document.getElementById("special").checked) {
              possible += special;
          }
          var password = "";
          for (var i = 0; i &lt; length; i++) {
              password += possible.charAt(Math.floor(Math.random() * possible.length));
          }
          document.getElementById("password").innerHTML = password;
          return false;
        }
        
        function copyPassword() {
          var password = document.getElementById("password");
          password.select();
          document.execCommand("copy");
          alert("Mot de passe copié dans le presse-papiers!");
        }
      &lt;/script>
&lt;/body>
&lt;/html></pre>



<p><em>A ce moment précis, le <strong>code ci-dessus « ne fonctionne pas</strong>« . De plus, il utilise des fonctions obsolètes comme document.execCommand(). Il est préférable d&rsquo;utiliser l&rsquo;API Clipboard.</em> <em>En réalité, le code fonctionne, mais il n&rsquo;a pas gardé en mémoire que je voulais qu&rsquo;on prévienne le comportement par défaut des formulaire. De ce fait, lorsque j&rsquo;exécute le formulaire, la page se recharge et je ne vois aucun mot de passe généré.</em></p>



<p>Le code ne fonctionne plus. </p>



<pre class="wp-block-code"><code>Le comportement du formulaire est resté par défaut, peux-tu corriger cela</code></pre>



<p>Il y a plusieurs façons de prévenir le comportement par défaut d&rsquo;un formulaire en JavaScript, mais l&rsquo;une des façons les plus courantes consiste à utiliser l&rsquo;événement <code>submit</code> de JavaScript pour écouter la soumission du formulaire, puis utiliser la méthode <code>preventDefault()</code> pour empêcher le comportement par défaut de soumission du formulaire.</p>



<p>Voici comment le code pourrait être modifié pour inclure cette fonctionnalité:</p>



<p></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form id="password-form">
  &lt;label for="length">Entrez la longueur souhaitée pour le mot de passe :&lt;/label>
  &lt;input type="number" id="length" name="length" min="1" required>
  &lt;br>
  &lt;input type="checkbox" id="lowercase" name="lowercase" checked>
  &lt;label for="lowercase">Inclure des minuscules&lt;/label>
  &lt;br>
  &lt;input type="checkbox" id="uppercase" name="uppercase" checked>
  &lt;label for="uppercase">Inclure des majuscules&lt;/label>
  &lt;br>
  &lt;input type="checkbox" id="numbers" name="numbers" checked>
  &lt;label for="numbers">Inclure des chiffres&lt;/label>
  &lt;br>
  &lt;input type="checkbox" id="special" name="special" checked>
  &lt;label for="special">Inclure des caractères spéciaux&lt;/label>
  &lt;br>
  &lt;input type="submit" value="Générer le mot de passe">
&lt;/form>

&lt;br>

&lt;textarea id="password" readonly>&lt;/textarea>
&lt;button id="copy-button" onclick="copyPassword()">Copier le mot de passe&lt;/button>

&lt;div id="error-message" style="color: red;">&lt;/div>

&lt;script>
  var form = document.getElementById("password-form");
  form.addEventListener("submit", function(event) {
    event.preventDefault();
    var length = document.getElementById("length").value;
    if(!length) {
        document.getElementById("error-message").innerHTML = "Veuillez entrer une longueur pour le mot de passe";
        return false;
    }
    var lowercase = "abcdefghijklmnopqrstuvwxyz";
    var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var numbers = "0123456789";
    var special = "!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";
    var possible = "";
    if(document.getElementById("lowercase").checked) {
        possible += lowercase;
    }
    if(document.getElementById("uppercase").checked) {
        possible += uppercase;
    }
    if(document.getElementById("numbers").checked) {
        possible += numbers;
    }
    if(document.getElementById("special").checked) {
        possible += special;
    }
    var password = "";
    for (var i = 0; i &lt; length; i++) {
        password += possible.charAt(Math.floor(Math.random() * possible.length));
    }
    document.getElementById("password").innerHTML = password;
  });
  
  function copyPassword() {
    var password = document.getElementById("password");
    password.select();
    document.execCommand("copy");
    alert("Mot de passe copié dans le presse-papiers!");
  }
&lt;/script>
</pre>



<p>Ainsi, le code utilise la fonction <code>preventDefault()</code> pour prévenir le comportement par défaut des formulaires en javascript.</p>



<p>4. Lui faire remarquer l&rsquo;obsolescence de son code</p>



<p>document.execCommand(« copy ») est dépréciée. Peux-tu me donner un code alternatif</p>



<p>Vous avez raison, la méthode <code>document.execCommand("copy")</code> pour copier le contenu dans le presse-papiers est dépréciée et n&rsquo;est plus supportée par tous les navigateurs.</p>



<p>Une alternative courante pour copier le contenu dans le presse-papiers est d&rsquo;utiliser l&rsquo;API Clipboard API, qui est supportée par la plupart des navigateurs modernes. voici comment le code JavaScript pourrait être modifié pour utiliser l&rsquo;API Clipboard API:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function copyPassword() {
    var password = document.getElementById("password");
    navigator.clipboard.writeText(password.value).then(function() {
      alert("Mot de passe copié dans le presse-papiers!");
    }, function(err) {
      alert("Erreur lors de la copie du mot de passe : " + err);
    });
  }
</pre>



<p>Ce code utilise la méthode <code>navigator.clipboard.writeText()</code> pour copier le contenu de la variable <code>password</code> dans le presse-papiers. La méthode renvoie une promesse, qui est résolue si la copie est réussie ou rejetée si une erreur se produit. Il est important de noter que l&rsquo;API Clipboard API nécessite des autorisations spécifiques pour fonctionner.</p>



<h2 class="wp-block-heading" id="5-ajoutez-un-peu-de-style-au-générateur-avec-css">5. Ajoutez un peu de style au générateur avec CSS</h2>



<pre class="wp-block-code"><code>Peux m'ajouter un style css coloré avec des couleurs vives et des champs de formulaire arrondis</code></pre>



<pre class="EnlighterJSRAW" data-enlighter-language="css" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#password-form {
  padding: 20px;
}

#password-form input[type="text"], #password-form input[type="number"], #password-form input[type="checkbox"], #password-form input[type="submit"], #password, #copy-button {
  border-radius: 10px;
  padding: 10px;
  margin-bottom: 10px;
}

#password-form input[type="submit"] {
  background-color: #4CAF50;
  color: white;
  border: none;
  cursor: pointer;
}

#password {
  width: 100%;
  min-height: 50px;
  background-color: #f2f2f2;
}

#copy-button {
  background-color: #4CAF50;
  color: white;
  border: none;
  cursor: pointer;
}

#error-message {
  margin-top: 10px;
}
</pre>



<h2 class="wp-block-heading" id="6-code-final-généré-par-chatgpt">6. Code final généré par ChatGPT</h2>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html lang="en">

&lt;head>
    &lt;meta charset="UTF-8">
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge">
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
    &lt;title>Générateur de mot passe&lt;/title>
    &lt;style>
        #password-form {
            padding: 20px;
        }

        #password-form input[type="text"],
        #password-form input[type="number"],
        #password-form input[type="checkbox"],
        #password-form input[type="submit"],
        #password,
        #copy-button {
            border-radius: 10px;
            padding: 10px;
            margin-bottom: 10px;
        }

        #password-form input[type="submit"] {
            background-color: #4CAF50;
            color: white;
            border: none;
            cursor: pointer;
        }

        #password {
            width: 100%;
            min-height: 50px;
            background-color: #f2f2f2;
        }

        #copy-button {
            background-color: #4CAF50;
            color: white;
            border: none;
            cursor: pointer;
        }

        #error-message {
            margin-top: 10px;
        }
    &lt;/style>
&lt;/head>

&lt;body>
    &lt;form id="password-form">
        &lt;label for="length">Entrez la longueur souhaitée pour le mot de passe :&lt;/label>
        &lt;input type="number" id="length" name="length" min="1" required>
        &lt;br>
        &lt;input type="checkbox" id="lowercase" name="lowercase" checked>
        &lt;label for="lowercase">Inclure des minuscules&lt;/label>
        &lt;br>
        &lt;input type="checkbox" id="uppercase" name="uppercase" checked>
        &lt;label for="uppercase">Inclure des majuscules&lt;/label>
        &lt;br>
        &lt;input type="checkbox" id="numbers" name="numbers" checked>
        &lt;label for="numbers">Inclure des chiffres&lt;/label>
        &lt;br>
        &lt;input type="checkbox" id="special" name="special" checked>
        &lt;label for="special">Inclure des caractères spéciaux&lt;/label>
        &lt;br>
        &lt;input type="submit" value="Générer le mot de passe">
    &lt;/form>

    &lt;br>

    &lt;textarea id="password" readonly>&lt;/textarea>
    &lt;button id="copy-button" onclick="copyPassword()">Copier le mot de passe&lt;/button>

    &lt;div id="error-message" style="color: red;">&lt;/div>

    &lt;script>
        var form = document.getElementById("password-form");
        form.addEventListener("submit", function (event) {
            event.preventDefault();
            var length = document.getElementById("length").value;
            if (!length) {
                document.getElementById("error-message").innerHTML = "Veuillez entrer une longueur pour le mot de passe";
                return false;
            }
            var lowercase = "abcdefghijklmnopqrstuvwxyz";
            var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            var numbers = "0123456789";
            var special = "!#$%&amp;()*+,-./:;&lt;=>?@[]^_`{|}~";
            var possible = "";
            if (document.getElementById("lowercase").checked) {
                possible += lowercase;
            }
            if (document.getElementById("uppercase").checked) {
                possible += uppercase;
            }
            if (document.getElementById("numbers").checked) {
                possible += numbers;
            }
            if (document.getElementById("special").checked) {
                possible += special;
            }
            var password = "";
            for (var i = 0; i &lt; length; i++) {
                password += possible.charAt(Math.floor(Math.random() * possible.length));
            }
            document.getElementById("password").innerHTML = password;
        });

        function copyPassword() {
            var password = document.getElementById("password");
            navigator.clipboard.writeText(password.value).then(function () {
                alert("Mot de passe copié dans le presse-papiers!");
            }, function (err) {
                alert("Erreur lors de la copie du mot de passe : " + err);
            });
        }

    &lt;/script>
&lt;/body>

&lt;/html></pre>



<div class="wp-block-buttons has-custom-font-size has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://s2prod.net/playground/generateur-mot-de-passe.html" target="_blank" rel="noreferrer noopener">Demo</a></div>
</div>



<h2 class="wp-block-heading" id="7-conclusion">7. Conclusion</h2>



<p>Le code n&rsquo;est pas parfait, mais il <strong>fonctionne</strong>. Il m&rsquo;aura fallu 6 échanges avec l&rsquo;IA et quelques tests en live, soit moins de 10 minutes pour « coder » et tester.</p>



<p>Beaucoup pensent que l&rsquo;IA va en mettre plusieurs au chômage. Personnellement je vois cela comme <strong>un outil qui permet de gagner un temps considérable</strong>! Là, où il fallait 3 ou 4 heures de développement, il en faut <strong>moins de 10 minutes</strong>.  </p>



<p>Cependant, il y a peut-être une corporation qui a du souci à se faire, c&rsquo;est celle du <strong>e-learning</strong>. <strong>ChatGPT </strong>répond à mes attentes bien au-delà de n&rsquo;importe quelle formation en ligne !</p>
]]></content:encoded>
					
					<wfw:commentRss>https://s2prod.net/generateur-mot-de-passe-javascript-chatgpt/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Quels sont les différents événements supportés par JavaScript ?</title>
		<link>https://s2prod.net/quels-sont-les-differents-evenements-supportes-par-javascript/</link>
					<comments>https://s2prod.net/quels-sont-les-differents-evenements-supportes-par-javascript/#comments</comments>
		
		<dc:creator><![CDATA[s2prod]]></dc:creator>
		<pubDate>Tue, 23 Mar 2021 06:44:08 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Evènements JavaScript]]></category>
		<guid isPermaLink="false">https://s2prod.net/?p=194</guid>

					<description><![CDATA[La programmation qui permet des calculs basés sur les activités dans un navigateur ou par les activités effectuées par l&#8217;utilisateur sur les éléments d&#8217;un document est connue sous le nom de programmation événementielle. Un événement est la spécification (essentiellement un objet créé par le navigateur et JavaScript) de quelque chose d&#8217;important qui s&#8217;est produit. Des [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>La programmation qui permet des calculs basés sur les activités dans un navigateur ou par les activités effectuées par l&rsquo;utilisateur sur les éléments d&rsquo;un document est connue sous le nom de programmation événementielle.</p>



<p>Un événement est la spécification (essentiellement un objet créé par le navigateur et JavaScript) de quelque chose d&rsquo;important qui s&rsquo;est produit. Des exemples d&rsquo;événements sont le clic, l&rsquo;envoi, le keyup, etc. En JavaScript, tous les noms d&rsquo;événements sont spécifiés en minuscules. Un gestionnaire d&rsquo;événement (essentiellement une fonction) est un ensemble d&rsquo;instructions (code) qui gère l&rsquo;événement.</p>



<p>Le tableau ci-dessous énumère les événements les plus couramment utilisés et les attributs de balises qui leur sont associés :</p>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th><strong>Evènement</strong> (<em>Event</em>)</th><th><strong>Balise attribut</strong> (<em>Tag Attribute</em>)</th></tr></thead><tbody><tr><td>blur</td><td>onblur</td></tr><tr><td>change</td><td>onchange</td></tr><tr><td>click</td><td>onclick</td></tr><tr><td>dblclick</td><td>ondblclick</td></tr><tr><td>focus</td><td>onfocus</td></tr><tr><td>keydown</td><td>onkeydown</td></tr><tr><td>keypress</td><td>onkeypress</td></tr><tr><td>keyup</td><td>onkeyup</td></tr><tr><td>load</td><td>onload</td></tr><tr><td>mousedown</td><td>onmousedown</td></tr><tr><td>mouseup</td><td>onmouseup</td></tr><tr><td>mousemove</td><td>onmousemove</td></tr><tr><td>mouseover</td><td>onmouseover</td></tr><tr><td>mouseout</td><td>onmouseout</td></tr><tr><td>reset</td><td>onreset</td></tr><tr><td>select</td><td>onselect</td></tr><tr><td>submit</td><td>onsubmit</td></tr><tr><td>unload</td><td>onunload</td></tr></tbody></table></figure>



<figure class="wp-block-table"><table><thead><tr><th><strong>Attribut </strong>(<em>Attribute</em></th><th><strong>Balise </strong>(<em>Tag</em>)</th><th><strong>Description de l’événement</strong></th></tr></thead><tbody><tr><td>onblur</td><td>&lt;a&gt;<br>&lt;button&gt;<br>&lt;input&gt;<br>&lt;textarea&gt;<br>&lt;select&gt;</td><td>Lorsque la balise <strong>&lt;a&gt;</strong> perd de son focus. <br>Lorsque la balise <strong>&lt;button&gt;</strong> perd de son focus.<br>Lorsque la balise <strong>&lt;input&gt;</strong> perd de son focus<br>Lorsque la balise <strong>&lt;textarea&gt; </strong>perd de son focus<br>Lorsque la balise <strong>&lt;select&gt;</strong> perd de son focus</td></tr><tr><td>onchange</td><td>&lt;input&gt;<br>&lt;textarea&gt;<br>&lt;select&gt;</td><td>Lorsque la balise <strong>&lt;input&gt;</strong> est modifiée et perd de son focus.<br>Lorsque la balise <strong>&lt;textarea&gt;</strong> change et perd de sa focus.<br>Lorsque la balise <strong>&lt;select&gt;</strong> est modifiée et  perd de son focus.</td></tr><tr><td>onclick</td><td>&lt;a&gt;<br>&lt;input&gt;</td><td>Lorsque l&rsquo;utilisateur clique sur la balise <strong>&lt;a&gt;</strong>.<br>Lorsque la balise <strong>&lt;input&gt;</strong> est cliquée.</td></tr><tr><td>ondblclick</td><td>La plupart des balises</td><td>Lorsque l&rsquo;utilisateur double-clique sur le bouton gauche de la souris.</td></tr><tr><td>onfocus</td><td>&lt;a&gt;<br>&lt;input&gt;<br>&lt;textarea&gt;<br>&lt;select&gt;</td><td>Lorsque la balise <strong>&lt;a&gt;</strong> prend son focus.<br>Lorsque la balise <strong>&lt;input&gt;</strong> prend son focus.</td></tr><tr><td>onkeydown</td><td>&lt;body&gt;<br>éléments de &lt;form&gt;</td><td>Lorsqu&rsquo;une touche du clavier est enfoncée</td></tr><tr><td>onkeypress</td><td>&lt;body&gt; <br>éléments de &lt;form&gt; </td><td>Lorsqu&rsquo;une touche du clavier est pressée et relâchée</td></tr><tr><td>onkeyup</td><td>&lt;body&gt;<br>éléments de &lt;form&gt;</td><td>Lorsqu&rsquo;une touche du clavier est relâchée</td></tr><tr><td>onload</td><td>&lt;body&gt;</td><td>Lorsque chargement du document est terminé</td></tr><tr><td>onmousedown</td><td>La plupart des balises</td><td>Lorsque l&rsquo;utilisateur clique sur le bouton gauche de la souris</td></tr><tr><td>onmouseup</td><td>La plupart des balises</td><td>Lorsque l&rsquo;utilisateur relâche le bouton gauche de la souris</td></tr><tr><td>onmousemove</td><td>La plupart des balises</td><td>Lorsque l&rsquo;utilisateur déplace le curseur de la souris sur l&rsquo;élément</td></tr><tr><td>onmouseover</td><td>La plupart des balises</td><td>Lorsque le curseur de la souris est déplacé sur l&rsquo;élément</td></tr><tr><td>onmouseout</td><td>La plupart des balises</td><td>Lorsque le curseur de la souris est éloigné de l&rsquo;élément (il sort de l&rsquo;élément).</td></tr><tr><td>onreset</td><td>&lt;form&gt;</td><td>Lorsque le bouton de réinitialisation est cliqué</td></tr><tr><td>onselect</td><td>&lt;input&gt;<br>&lt;textarea&gt;</td><td>Lorsque le curseur de la souris est déplacé sur la balise <strong>&lt;input&gt;</strong> ou que le texte est sélectionné dans la zone de texte <strong>&lt;textarea&gt;</strong>.</td></tr><tr><td>onsubmit</td><td>&lt;form&gt;</td><td>Lorsque le bouton de type= »submit » est pressé</td></tr><tr><td>onunload</td><td>&lt;body&gt;</td><td>Lorsque l&rsquo;utilisateur quitte le document</td></tr></tbody></table></figure>



<p>Le tableau ci-dessous énumère les attributs des événements et leurs balises correspondantes en HTML :</p>



<p>Le processus consistant à associer un gestionnaire d&rsquo;événements à un événement est connu sous le nom d&rsquo;enregistrement. Il existe trois façons d&rsquo;enregistrer un gestionnaire d&rsquo;événements dans le modèle d&rsquo;événement DOM.</p>



<p> 1. La première consiste à attribuer le script de gestion d&rsquo;événements à un attribut de balise d&rsquo;événement, comme indiqué ci-dessous :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// Au clic du bouton on exécutera la fonction func1()
&lt;input type=”button” value=”Cliquez ici” onclick=”func1( );” />
</pre>



<p>Dans le code ci-dessus, le gestionnaire d&rsquo;événement <em>func1 </em>est attribué à l&rsquo;attribut d&rsquo;événement <strong>onclick </strong>d&rsquo;un bouton.</p>



<p>2. La deuxième façon consiste à affecter le gestionnaire d&rsquo;événement à la propriété d&rsquo;événement de l&rsquo;élément, comme indiqué ci-dessous :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// Au clic de l'élément on exécutera la fonction func1()
document.getElementById(ID_de_Element).onclick = func1;
</pre>



<p>3. Enfin la troisième façon et la plus communément utilisée depuis <strong>ES6 </strong>et d&rsquo;utiliser ce qu&rsquo;on appelle un écouteur d’événement.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// Au clic de l'élément on exécutera la fonction func1()
const element = document.querySelector("ID_ou_Class_Element");
element.addEventListener('click', func1);
</pre>



<p>Les trois manières fonctionnent et selon le contexte vous pourrez être amené à rencontrer et utiliser l&rsquo;une des trois. Mais gardez en mémoire que c&rsquo;est la dernière façon qui est préconisée. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://s2prod.net/quels-sont-les-differents-evenements-supportes-par-javascript/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
