{"id":25,"date":"2012-09-12T21:42:24","date_gmt":"2012-09-12T20:42:24","guid":{"rendered":"http:\/\/geekcommunicant.com\/blog\/?p=25"},"modified":"2024-11-05T14:25:32","modified_gmt":"2024-11-05T13:25:32","slug":"un-compteur-de-caracteres-en-jquery","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2012\/09\/12\/un-compteur-de-caracteres-en-jquery\/","title":{"rendered":"Un compteur de caract\u00e8res en jQuery"},"content":{"rendered":"\n<p>Aujourd&rsquo;hui nous allons voir comment faire un plugin jQuery, qui permet de compter le nombre de caract\u00e8res pouvant encore \u00eatre accept\u00e9 dans des champs de texte.<\/p>\n\n\n\n<p>Pour commencer, il faut d\u00e9cider du nombre de variables utiles \u00e0 ce genre de r\u00e9alisation. Une longueur maximale autoris\u00e9e est un minimum. Ensuite, comme variables pouvant \u00eatre utiles il y a:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>un seuil \u00e0 partir duquel alerter l&rsquo;utilisateur<\/li><li>pouvoir d\u00e9finir des couleurs diff\u00e9rentes selon l&rsquo;\u00e9tat du champ (en-dessous du seuil, au-dessus du seuil, au-dessus du maximum)<\/li><\/ul>\n\n\n\n<!--more-->\n\n\n\n<p>Maintenant que nous avons d\u00e9fini les fonctionnalit\u00e9s de notre plugin, nous pouvons commencer \u00e0 coder. Comme pour tout plugin jQuery, tout le code doit \u00eatre compris dans une fonction:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n(function($){ \/* tout le reste du code se trouvera ici *\/ })(jQuery);\n<\/pre><\/div>\n\n\n<p>Viens ensuite la d\u00e9claration du plugin lui-m\u00eame:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n$.fn.charCount = function(options) { }\n<\/pre><\/div>\n\n\n<p>Ensuite, viens la d\u00e9claration des variables du plugin:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nvar settings = $.extend({\n    max: 250, \/\/ Nombre de caract\u00e8res maximum\n    thr: 50, \/\/ Seuil d&#039;alerte\n    normal: &#039;#000000&#039;, \/\/ Couleur du texte quand tout va bien\n    alert: &#039;#FFA500&#039;, \/\/ Couleur du texte quand le seuil est atteint\n    reached: &#039;#FF0000&#039; \/\/ Couleur du texte quand le maximum est atteint\n}, options);\n<\/pre><\/div>\n\n\n<p>Le plugin devant \u00eatre utilisable sur plusieur \u00e9l\u00e9ments d&rsquo;une page, il faut pouvoir appliquer les effets du plugin sur chaque \u00e9l\u00e9ment faisant appel \u00e0 lui. Pour cela, on utilise la fonction suivante:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nreturn this.each(function() { });\n<\/pre><\/div>\n\n\n<p>Avant toute chose, il faut ajouter \u00e0 chaque \u00e9l\u00e9ment une zone dans laquelle afficher le nombre de caract\u00e8res restants. Pour cela, deux lignes de code suffisent:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nvar obj = $(this); \/\/ Permet de simplifier la syntaxe\nobj.after(&#039;&lt;div class=&quot;counter&quot;&gt;&lt;span style=&quot;color:&#039;+settings.normal+&#039;;&quot;&gt;&#039;+settings.max+&#039; caract\u00e8res restants&lt;\/span&gt;&lt;\/div&gt;&#039;);\n<\/pre><\/div>\n\n\n<p>Le compteur devant \u00eatre actualis\u00e9 \u00e0 chaque entr\u00e9e d&rsquo;un nouveau caract\u00e8re, on fait appel \u00e0 la fonction:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nobj.keyup(function(){ });\n<\/pre><\/div>\n\n\n<p>\u00c0 pr\u00e9sent, voyons le coeur du plugin:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nvar text = obj.val().length; \/\/ R\u00e9cup\u00e8re le nombre de caract\u00e8res du champ\nvar remaining = settings.max - text; \/\/ Calcule le nombre de caract\u00e8res restants\n\n\/*\nEnsuite, trois cas se pr\u00e9sentent:\n- le nombre de caract\u00e8res est en-dessous du seuil\n- le nombre de caract\u00e8res est au-dessus du seuil\n- le nombre de caract\u00e8res est au-dessus du max\nDans chaque cas, le contenu de la zone de compteur est actualis\u00e9 avec le nombre de caract\u00e8res restants, et la couleur associ\u00e9e\n*\/\n\nif ( remaining &gt; settings.thr &amp;&amp; remaining &gt; 0 ) {\n    obj.next(&#039;.counter&#039;).html(&#039;&lt;span style=&quot;color:&#039;+settings.normal+&#039;;&quot;&gt;&#039;+remaining+&#039; caract\u00e8res restants&lt;\/span&gt;&#039;);\n} else if ( remaining &lt;= settings.thr &amp;&amp; remaining &gt; 0 ) {\n    obj.next(&#039;.counter&#039;).html(&#039;&lt;span style=&quot;color:&#039;+settings.alert+&#039;;&quot;&gt;&#039;+remaining+&#039; caract\u00e8res restants&lt;\/span&gt;&#039;);\n} else {\n    obj.next(&#039;.counter&#039;).html(&#039;&lt;span style=&quot;color:&#039;+settings.reached+&#039;;&quot;&gt;Maximum atteint&lt;\/span&gt;&#039;);\n}\n<\/pre><\/div>\n\n\n<p>Pour finir, voici l&rsquo;ensemble du code du plugin:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n(function($){  \n    $.fn.charCount = function(options) {  \n        \n        var settings = $.extend({\/\/set the default values for the controls\n            max: 250,\n            thr: 50,\n            normal: &#039;#000000&#039;,\n            alert: &#039;#FFA500&#039;,\n            reached: &#039;#FF0000&#039;\n        }, options);\n        \n        return this.each(function() {\n            var obj = $(this);\n            \n            obj.after(&#039;&lt;div class=&quot;counter&quot;&gt;&lt;span style=&quot;color:&#039;+settings.normal+&#039;;&quot;&gt;&#039;+settings.max+&#039; caract\u00e8res restants&lt;\/span&gt;&lt;\/div&gt;&#039;);\n            \n            obj.keyup(function(){\n                \n                var text = obj.val().length;\n                var remaining = settings.max - text;\n                \n                if ( remaining &gt; settings.thr &amp;&amp; remaining &gt; 0 ) {\n                    obj.next(&#039;.counter&#039;).html(&#039;&lt;span style=&quot;color:&#039;+settings.normal+&#039;;&quot;&gt;&#039;+remaining+&#039; caract\u00e8res restants&lt;\/span&gt;&#039;);\n                } else if ( remaining &lt;= settings.thr &amp;&amp; remaining &gt; 0 ) {\n                    obj.next(&#039;.counter&#039;).html(&#039;&lt;span style=&quot;color:&#039;+settings.alert+&#039;;&quot;&gt;&#039;+remaining+&#039; caract\u00e8res restants&lt;\/span&gt;&#039;);\n                } else {\n                    obj.next(&#039;.counter&#039;).html(&#039;&lt;span style=&quot;color:&#039;+settings.reached+&#039;;&quot;&gt;Maximum atteint&lt;\/span&gt;&#039;);\n                }\n            });\n        });  \n    };  \n})(jQuery); \n<\/pre><\/div>\n\n\n<p>Pour voir le plugin en action, rendez-vous <a href=\"https:\/\/geekcommunicant.com\/demos\/charcount.html\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a>.<\/p>\n\n\n\n<p>J&rsquo;esp\u00e8re que cet article vous aura \u00e9t\u00e9 utile, et je vous dis \u00e0 bient\u00f4t pour d&rsquo;autres d\u00e9couvertes !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd&rsquo;hui nous allons voir comment faire un plugin jQuery, qui permet de compter le nombre de caract\u00e8res pouvant encore \u00eatre accept\u00e9 dans des champs de texte. Pour commencer, il faut d\u00e9cider du nombre de variables utiles \u00e0 ce genre de &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2012\/09\/12\/un-compteur-de-caracteres-en-jquery\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[6,8,7],"class_list":["post-25","post","type-post","status-publish","format-standard","hentry","category-jquery","tag-charcount","tag-compteur-de-caracteres","tag-plugin"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-p","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1058,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/01\/06\/retour-compteur-caracteres\/","url_meta":{"origin":25,"position":0},"title":"Le retour du compteur de caract\u00e8res","author":"geekc","date":"06\/01\/2023","format":false,"excerpt":"Apr\u00e8s \u00eatre revenu derni\u00e8rement sur ma s\u00e9rie de tutos d\u2019introduction aux canvas, j\u2019ai d\u00e9cid\u00e9 de m\u2019attaquer \u00e0 l\u2019un de mes anciens articles me valant le plus d\u2019affichage sur le moteur de recherche d\u2019Alphabet\u00a0: le compteur de caract\u00e8res. Comme pour mes derniers articles traitant de JavaScript, une fois de plus je\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":40,"url":"https:\/\/geekcommunicant.com\/blog\/2012\/09\/26\/un-effet-de-porte-en-jquery\/","url_meta":{"origin":25,"position":1},"title":"Un effet de porte en jQuery","author":"geekc","date":"26\/09\/2012","format":false,"excerpt":"Aujourd'hui nous allons voir comment cr\u00e9er en jQuery et jQuery UI un effet de porte, avec l'image se s\u00e9parant en 4 par les coins, r\u00e9v\u00e9lant ainsi un texte. Avant tout, il faut comprendre comment s'organiseront les diff\u00e9rentes couches: \u00e0 la base, on trouve la couche contenant le texte (z-index: 0)juste\u2026","rel":"","context":"Dans &quot;jQuery&quot;","block_context":{"text":"jQuery","link":"https:\/\/geekcommunicant.com\/blog\/category\/jquery\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":148,"url":"https:\/\/geekcommunicant.com\/blog\/2012\/10\/04\/jquery-une-horloge-en-image\/","url_meta":{"origin":25,"position":2},"title":"[jQuery] Une horloge en image","author":"geekc","date":"04\/10\/2012","format":false,"excerpt":"Aujourd'hui, nous allons voir comment r\u00e9aliser en jQuery une horloge utilisant des images, que vous pouvez voir en action ici. Avant de commencer Pour des raisons de practicit\u00e9, nous allons utiliser les images utilis\u00e9es par le compteur de Gelbooru, que j'ai rassembl\u00e9es dans cette archive. La structure HTML Avant tout,\u2026","rel":"","context":"Dans &quot;jQuery&quot;","block_context":{"text":"jQuery","link":"https:\/\/geekcommunicant.com\/blog\/category\/jquery\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":171,"url":"https:\/\/geekcommunicant.com\/blog\/2012\/10\/18\/jquery-une-fenetre-modale\/","url_meta":{"origin":25,"position":3},"title":"[jQuery] Une fen\u00eatre modale","author":"geekc","date":"18\/10\/2012","format":false,"excerpt":"Bonjour \u00e0 tous, aujourd'hui nous allons voir comment r\u00e9aliser une fen\u00eatre modale en jQuery. Qu'est-ce que c'est ? Wikip\u00e9dia donne la d\u00e9finition suivante: Une fen\u00eatre modale est, dans une interface graphique, une fen\u00eatre qui prend le contr\u00f4le total du clavier et de l'\u00e9cran. Elle est en g\u00e9n\u00e9ral associ\u00e9e \u00e0 une\u2026","rel":"","context":"Dans &quot;jQuery&quot;","block_context":{"text":"jQuery","link":"https:\/\/geekcommunicant.com\/blog\/category\/jquery\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10,"url":"https:\/\/geekcommunicant.com\/blog\/2012\/09\/06\/un-dancefloor-en-jquery\/","url_meta":{"origin":25,"position":4},"title":"Un dancefloor en jQuery","author":"geekc","date":"06\/09\/2012","format":false,"excerpt":"Aujourd'hui, je vais vous expliquer comment cr\u00e9er en jQuery un effet de dancefloor \u00e0 la Saturday Night Fever (demo). Tout d'abord, de quoi est compos\u00e9 un tel \u00ab plancher de danse \u00bb ? Tout simplement de diff\u00e9rents carr\u00e9s\/cases, le tout contenu dans une surface d\u00e9finie. Ici le dancefloor sera une\u2026","rel":"","context":"Dans &quot;jQuery&quot;","block_context":{"text":"jQuery","link":"https:\/\/geekcommunicant.com\/blog\/category\/jquery\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":162,"url":"https:\/\/geekcommunicant.com\/blog\/2012\/10\/12\/jquery-une-horloge-sous-forme-de-diagramme\/","url_meta":{"origin":25,"position":5},"title":"[jQuery] Une horloge sous forme de diagramme","author":"geekc","date":"12\/10\/2012","format":false,"excerpt":"Avant de m'essayer \u00e0 l'horloge pr\u00e9sent\u00e9e dans l'article pr\u00e9c\u00e9dent, je m'\u00e9tait pos\u00e9 la question de trouver une forme plus originale d'afficher l'heure. Apr\u00e8s quelques recherches et essai, je suis arriv\u00e9 \u00e0 ce r\u00e9sultat. Le but de cet article est de vous expliquer le code que j'ai utilis\u00e9. Structure d'une barre:\u2026","rel":"","context":"Dans &quot;jQuery&quot;","block_context":{"text":"jQuery","link":"https:\/\/geekcommunicant.com\/blog\/category\/jquery\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":0,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/25\/revisions"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}