<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - Bovino</title>
		<link>https://www.developpez.net/forums/blogs/243304-bovino/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Fri, 01 May 2026 15:56:04 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - Bovino</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/</link>
		</image>
		<item>
			<title><![CDATA[Découvrir l'API HTML5 Notification]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b538/decouvrir-l-api-html5-notification/</link>
			<pubDate>Tue, 02 Jun 2015 13:26:03 GMT</pubDate>
			<description><![CDATA[L'API Notification de HTML5...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">L'API Notification de HTML5 vous permet d'afficher à l'utilisateur des notifications (comme son nom l'indique :mrgreen:) à la manière des messages natifs du navigateur ou des extensions du navigateur.<br />
Il s'agit d'une alternative élégantes aux abominables <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">alert</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> ou aux fenêtres modales (:arrow: <a href="http://www.developpez.net/forums/blogs/243304-bovino/b165/fenetres-modales-natives-html5/" target="_blank">dont celles natives de HTML5</a> ;)).<br />
Son utilisation est un peu particulière car elle requière une autorisation de l'utilisateur. On commence donc par vérifier que le navigateur implémente cette API, puis on demande l'autorisation :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #FF0000;">'Notification'</span> <span style="color: #0000ff;">in</span> <span style="color: #0080ff;">window</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    Notification.<span style="color: #0080ff;">requestPermission</span><span class="br0">&#40;</span><span style="color: #0000ff;">function</span> <span class="br0">&#40;</span><span style="color: #0080ff;">status</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span style="color: #808080;">// Reste du code de demande d'autorisation</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div>La méthode <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">requestPermission</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> prend en paramètre une fonction de rappel à laquelle sera passé un argument dont la valeur correspond à l'autorisation accordée par l'utilisateur.<br />
Trois valeurs sont possibles pour <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Notification.<span style="color: #0080ff;">status</span></span> :<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">granted</span>, l'autorisation a été accordée ;<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">denied</span>, l'autorisation a été refusée ;<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">default</span>, l'utilisateur a fermé la fenêtre de demande sans préciser s'il acceptait ou non.<br />
Seul la première valeur permet d'afficher les messages.<br />
La différence entre les deux autres valeurs est que si l'utilisateur fait un choix (autorisation ou refus), l'appel à  <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Notification.<span style="color: #0080ff;">status</span></span> ne demandera plus l'autorisation et gardera le choix déjà fait, tant qu'aucun choix n'a été fait (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">default</span>), la demande s'affichera.<br />
<br />
Une fois l'autorisation obtenue, il est possible d'afficher des messages à l'aide du constructeur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">new</span> <span style="color: #0080ff;">Notification</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>.<br />
Ce constructeur prend deux paramètres : le titre du message et un objet définissant certaines propriétés du message. Cet objet peut contenir diverses propriétés prédéfinies dont les plus utiles sont :<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">body</span>, qui correspond au texte du message ;<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">icon</span>, qui permet d'associer une icône au message.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> msg = <span style="color: #0000ff;">new</span> <span style="color: #0080ff;">Notification</span><span class="br0">&#40;</span><span style="color: #FF0000;">'Mon titre'</span>, <span class="br0">&#123;</span>
    <span style="color: #800000;">body</span>: <span style="color: #FF0000;">'Texte de mon message.'</span>,
    <span style="color: #800000;">icon</span>: <span style="color: #FF0000;">'chemin/de/limage.gif'</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div>Et voilà, votre message s'affiche !<br />
<br />
Plusieurs événements sont associés à la notification :<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">show</span>, déclenché lorsque le message s'affiche ;<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">click</span>, déclenché lors du clic sur le message ;<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">close</span>, déclenché lorsque le message se ferme ;<br />
• <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">error</span>, déclenché si une erreur survient.<br />
<br />
:arrow: <b><a href="http://dmouronval.developpez.com/notification/" target="_blank">Voir un exemple d'utilisation en ligne</a></b>.<br />
<br />
<u>Compatibilité</u>.<br />
Cette API est implémentée sur toutes les dernières versions des navigateurs (pour les versions plus anciennes, un préfixe peut être requis) sauf Internet Explorer qui ne l'a pas encore implémentée.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b538/decouvrir-l-api-html5-notification/</guid>
		</item>
		<item>
			<title><![CDATA[Comprendre la délégation d'événement en JavaScript]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b530/comprendre-delegation-d-evenement-javascript/</link>
			<pubDate>Thu, 28 May 2015 14:57:56 GMT</pubDate>
			<description><![CDATA[*La délégation d'événement,...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="4"><b>La délégation d'événement, qu'est-ce que c'est ?</b></font><br />
<br />
La délégation d'événement est une technique assez courante en JavaScript qui consiste à poser des écouteurs d'événement non pas sur l'élément HTML ciblé, mais sur l'un de ses ancêtres dans le DOM.<br />
<br />
<font size="4"><b>Comment ça marche ?</b></font><br />
<br />
Le concept essentiel pour comprendre cette technique est la notion de bouillonnement d'un événement. À de rares exceptions prêt, quasiment tous les événement bouillonnent.<br />
Si l'on se représente une page Web comme une feuille de papier sur laquelle on poserait d'autres feuilles de tailles différentes et placées à des endroits précis selon l'arborescence des balises et la mise en page CSS, on peut se représenter un événement (un clic sur une balise par exemple) comme étant intercepté par l'élément le plus au-dessus de l'empilement (et inversement, le plus profond dans l'arborescence du DOM). C'est donc cet élément qui va recevoir l'événement. Le bouillonnement est le mécanisme qui va faire « remonter » cet événement jusqu'au plus haut niveau de l'arborescence (la première feuille de papier) en passant par tous les éléments se trouvant à l'emplacement où l'événement a été déclenché, permettant ainsi à tous les gestionnaires d'événements associés de se déclencher.<br />
<br />
En résumé, si l'on considère le code HTML suivant<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">body</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
        <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">span</span><span style="color: #0000ff;">&gt;</span></span>Cliquer ici<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">span</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">body</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div>et que vous placez un écouteur d'événement clic sur la div, cliquer sur le texte du span déclenchera l'événement de la div bien que ce span « cache » cette dernière. Ceci est possible grâce au bouillonnement.<br />
<br />
Pour en revenir à notre délégation d'événement, nous pourrons savoir, avec l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Event</span> associé à tout événement, quel élément HTML a réellement déclenché cet événement (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Event.target</span>) et si ce dernier est bien celui que nous souhaitons cibler.<br />
<br />
<font size="4"><b>À quoi cela peut-il servir ?</b></font><br />
<br />
Il y a deux cas typiques d'utilisation de la délégation d'événement.<br />
<br />
• Lorsque l'on souhaite associer des événements similaires à différents éléments.<br />
Par exemple, imaginons que l'on souhaite afficher un texte initialement masqué en cliquant sur des items d'une liste ordonnée. Plutôt que de définir autant d'événement que d'éléments dans la liste, on pourra n'en utiliser qu'un seul placé sur la balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ul</span><span style="color: #0000ff;">&gt;</span></span></span><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ul</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;maListe&quot;</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;foo&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 1<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;bar&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 2<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;baz&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 3<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;toto&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 4<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;titi&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 5<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;tata&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 6<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Item 7<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Item 8<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Item 9<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;element&quot;</span> data-texte<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;42&quot;</span><span style="color: #0000ff;">&gt;</span></span>Item 10<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ul</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:120px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'maListe'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">'click'</span>, <span style="color: #0000ff;">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #0000ff;">var</span> initElem = e.target;
    <span style="color: #0000ff;">if</span><span class="br0">&#40;</span>initElem.className != <span style="color: #FF0000;">'element'</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span style="color: #808080;">// Si l'&eacute;l&eacute;ment n'est pas un de ceux &agrave; traiter</span>
        <span style="color: #0000ff;">return</span>;
    <span class="br0">&#125;</span>
    <span style="color: #0080ff;">alert</span><span class="br0">&#40;</span>initElem.dataset.texte<span class="br0">&#41;</span>;
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><b><a href="https://jsfiddle.net/fdg88cdy/" target="_blank">Voir l'exemple sur JSFiddle</a></b>.<br />
<br />
Dans ce code, on cherche à afficher le contenu de l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">data-texte</span> pour tous les élément ayant la classe <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">element</span>.<br />
On commence d'abord par récupérer l'élément ayant reçu l'événement. On vérifie ensuite si cet élément est bien du type que l'on cible, si ce n'est pas le cas, on stoppe l'exécution de la fonction, sinon, on affiche le message.<br />
<br />
• Lorsque l'on veut prévoir des gestionnaires d'événements sur des éléments n'étant pas encore présents dans la page.<br />
Il est de plus en plus fréquent, avec les interfaces riches et AJAX, que le contenu d'une page évolue en fonction des actions de l'utilisateur.<br />
On peut donc avoir à gérer des événements sur des éléments qui n'existent pas au chargement de la page mais qui sont susceptibles d'y apparaitre.<br />
Seulement, lorsque l'on déclare un gestionnaire, il ne peut s'appliquer qu'à des éléments effectivement présents au moment de la déclaration de l'écouteur : JavaScript n'est pas devin ni prédictif.<br />
Pour cela, on pourra facilement poser le gestionnaire sur un ancêtre connu (et existant) dans lequel seront insérés les futurs éléments.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;parent&quot;</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span>Ajouter un &eacute;l&eacute;ment<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'ajout'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">onclick</span> = <span style="color: #0000ff;">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'parent'</span><span class="br0">&#41;</span>.innerHTML = <span style="color: #FF0000;">'&lt;span id=&quot;enfant&quot;&gt;El&eacute;ment enfant ajout&eacute; dynamiquement&lt;/span&gt;'</span>;
<span class="br0">&#125;</span>;
<span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'parent'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">'click'</span>, <span style="color: #0000ff;">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #0000ff;">var</span> initElem = e.target;
    <span style="color: #0000ff;">if</span><span class="br0">&#40;</span>initElem.id == <span style="color: #FF0000;">'enfant'</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
        <span style="color: #0080ff;">alert</span><span class="br0">&#40;</span><span style="color: #FF0000;">'Vous avez cliqu&eacute; !'</span><span class="br0">&#41;</span>;
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><b><a href="https://jsfiddle.net/msp2no5s/" target="_blank">Voir l'exemple sur JSFiddle</a></b>.<br />
<br />
Au moment de déclarer l'événement, l'élément enfant n'existe pas, pourtant, lorsqu'on l'insère dans la page et que l'on clique dessus, le message s'affiche.<br />
<br />
<font size="4"><b>Aller plus loin</b></font><br />
Il est important, quand on utilise la délégation d'événement, de faire attention que si l'élément ciblé possède des éléments enfants, alors <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Event.target</span> peut ne pas correspondre à celui ciblé, il faudra dans ce cas remonter l'arborescence jusqu'à l'élément sur lequel le gestionnaire est posé en testant à chaque palier si l'élément en cours est celui recherché.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> initElem = <span style="color: #339933;">false</span>, tmpElem = e.target;
<span style="color: #0000ff;">do</span><span class="br0">&#123;</span>
    <span style="color: #0000ff;">if</span><span class="br0">&#40;</span>tmpElem.id == <span style="color: #FF0000;">'id_recherche'</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
        initElem = tmpElem;
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span style="color: #0000ff;">while</span><span class="br0">&#40;</span>tmpElem = tmpElem.parentNode &amp;&amp; tmpElem != <span style="color: #0000ff;">this</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>initElem<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #808080;">// tmpElem ne vaut pas false si on entre dans cette condition</span>
    <span style="color: #808080;">// donc l'&eacute;l&eacute;ment recherch&eacute; a &eacute;t&eacute; trouv&eacute;</span>
    <span style="color: #808080;">// on peut donc faire les traitement voulus</span>
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div><br />
Il est aussi à noter que la plupart des bibliothèques JavaScript permettent d'utiliser la délégation d'événement.<br />
Par exemple pour jQuery, la syntaxe<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">$</span><span class="br0">&#40;</span><span style="color: #FF0000;">'#elem1'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">on</span><span class="br0">&#40;</span><span style="color: #FF0000;">'click'</span>, <span style="color: #FF0000;">'.elems2'</span>, callback<span class="br0">&#41;</span>;</pre>
</div>permet de déléguer la gestion des événements clic sur les éléments ayant la classe CSS <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elems2</span> sur l'élément dont l'identifiant est <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elem1</span>.<br />
N'hésitez pas à indiquer dans les commentaires les différentes syntaxes pour les autres <i>frameworks</i>.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b530/comprendre-delegation-d-evenement-javascript/</guid>
		</item>
		<item>
			<title><![CDATA[Modification d'un élément du DOM : le méconnu insertAdjacentHTML()]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b500/modification-d-element-dom-meconnu-insertadjacenthtml/</link>
			<pubDate>Wed, 13 May 2015 13:04:42 GMT</pubDate>
			<description><![CDATA[Lorsque l'on veut modifier le...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Lorsque l'on veut modifier le contenu d'un document Web (et c'est principalement la finalité de JavaScript), certaines méthodes ou propriétés sont largement connues et utilisées.<br />
En particulier, l'utilisation de la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span> est très répandue, au point que cette propriété, à l'origine à l'origine spécifique à Internet Explorer, s'est généralisée à tous les navigateurs et a même fini par être intégrée aux spécifications HTML5.<br />
On connait aussi les méthodes <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">createElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">createTextNode</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">appendChild</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">insertBefore</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>.<br />
L'ensemble de ces fonctionnalités permettant de faire beaucoup de choses. Mais pas tout, comme s'en est récemment rendu compte l'un de nos visiteurs.<br />
Il souhaitait ajouter des champs dans une zone de son formulaire. Pour cela, il eut l'idée de récupérer la valeur de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span>, de la concaténer avec le champ supplémentaire puis affecter le nouveau contenu à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span>.<br />
La technique est correcte en soi et fonctionne globalement bien. Globalement seulement car il y a un hic : en effet, si l'utilisateur avait déjà rempli des champs de cette partie du formulaire, cela n'avait pas eu d'impact sur le HTML et donc la réaffectation par <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span> vidait les champs précédemment remplis.<br />
<br />
Pour pallier ce désagrément, on aurait pu envisager deux alternatives possibles : soit faire une boucle sur les champs déjà remplis, affecter l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">value</span> (ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">selected</span> pour les <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span></span>) avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">setAttribute()</span> et là, l'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span> aurait fonctionné correctement, soit passer par des création / insertion d'élément à l'aide de  <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">createElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> / <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">appendChild</span>.<br />
<br />
Sauf que ces deux techniques sont un peu fastidieuses et verbeuses… surtout lorsque l'on dispose d'une méthode permettant de faire la même chose en une seule instruction.<br />
Cette méthode, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">insertAdjacentHTML</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> est pourtant assez peu connue et on la rencontre rarement. Pourtant, elle est compatible tous navigateurs, y compris les versions anciennes d'Internet Explorer.<br />
<br />
Son utilisation est simple :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">HTMLElement.<span style="color: #0080ff;">insertAdjacentHTML</span><span class="br0">&#40;</span>position, html<span class="br0">&#41;</span>;</pre>
</div>Comme on peut le voir, elle s'applique à un objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span> et prend deux paramètres : la position de l'insertion par rapport à l'élément sur lequel on l'appelle et la chaine de caractère correspondant au code HTML à insérer.<br />
Il existe quatre positions possible :<br />
<ul><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">'beforebegin'</span> : le HTML sera inséré avant la balise d'ouverture de l'élément ciblé ;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">'afterbegin'</span> : après la balise d'ouverture de l'élément ciblé ;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">'beforeend'</span> : avant la balise de fermeture de l'élément ciblé ;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">'afterend'</span> : après la balise de fermeture de l'élément ciblé.</li></ul><br />
Soit :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #808080;">&lt;!-- beforebegin --&gt;</span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #808080;">&lt;!-- afterbegin --&gt;</span> (...) <span style="color: #808080;">&lt;!-- beforeend --&gt;</span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #808080;">&lt;!-- afterend --&gt;</span></pre>
</div></blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b500/modification-d-element-dom-meconnu-insertadjacenthtml/</guid>
		</item>
		<item>
			<title>Les méthodes de récupération des éléments du DOM</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b488/methodes-recuperation-elements-dom/</link>
			<pubDate>Thu, 07 May 2015 13:43:40 GMT</pubDate>
			<description><![CDATA[Dans le cadre d'une page Web,...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Dans le cadre d'une page Web, la finalité de JavaScript est essentiellement de modifier les informations affichées. Pour cela, il est nécessaire de récupérer puis manipuler les objets du <b><a href="http://javascript.developpez.com/faq/javascript/?page=DOM#DOMquestce" target="_blank"><i>Document Object Model</i> ou DOM</a></b>.<br />
<br />
Pour récupérer ce ou ces éléments, diverses méthodes sont disponibles.<br />
<br />
<font size="4">Différence entre élément DOM et collection</font><br />
Les méthodes de récupération d'éléments peuvent renvoyer deux types de valeurs : soit un élément, soit une collection d'éléments.<br />
Un élément (ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span>) est un objet correspondant à la représentation par JavaScript d'une balise HTML. Cet objet possède notamment diverses propriétés correspondant aux valeurs des divers attributs que cette balise peut contenir.<br />
Une collection (ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLCollection</span>) est un objet (comparable en fait à un tableau) comprenant plusieurs éléments.<br />
Cette différence est importante, car JavaScript ne sait traiter qu'un élément à la fois, si vous récupérez une collection (y compris ne contenant qu'un seul élément), il sera obligatoire de traiter les éléments qu'il contient individuellement en général avec une boucle (une collection possède une propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">length</span></span> correspondant au nombre d'éléments qu'elle contient).<br />
<br />
<font size="4">Les propriétés de l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span></font><br />
L'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span> dispose de propriétés référençant divers éléments et collections utiles (les collections obsolètes ne sont pas listées).<br />
<ul><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.head</span> (élément) : représente la balise HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">head</span><span style="color: #0000ff;">&gt;</span></span></span>.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.body</span> (élément) : représente la balise HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">body</span><span style="color: #0000ff;">&gt;</span></span></span>.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">anchors</span></span> (collection) : représente toutes les ancres du document (sont considérées comme ancres toutes les balises <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">a</span><span style="color: #0000ff;">&gt;</span></span></span> ayant un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">name</span> bien qu'une ancre puisse aussi être atteinte par son attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">id</span>).</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">embeds</span></span> (collection) : représente tous les éléments correspondants aux balises HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">embed</span><span style="color: #0000ff;">&gt;</span></span></span>.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">forms</span></span> (collection) : représente tous les formulaires du document.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">images</span></span> (collection) : représente toutes les images du document (balises HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">img</span> /<span style="color: #0000ff;">&gt;</span></span></span> uniquement).</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.links</span> (collection) : représente tous les liens hypertexte du document (balises HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">area</span><span style="color: #0000ff;">&gt;</span></span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">a</span><span style="color: #0000ff;">&gt;</span></span></span> ayant un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">href</span>).</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span>.scripts</span> (collection) : représente toutes les images du document (balises HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">&lt;script&gt;</span></span>).</li></ul><br />
<br />
Notez aussi en complément que chaque objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLFormElement</span> (correspondant aux formulaires) possède une propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">elements</span></span> contenant la collection de tous les champs du formulaire et que chaque objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLSelectElement</span> (balises HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">select</span><span style="color: #0000ff;">&gt;</span></span></span>) une propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">options</span> contenant la collection de ses options (balises HTML <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span></span>).<br />
<br />
<font size="4">Les méthodes de l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span> et/ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span></font><br />
Il est aussi possible de récupérer des éléments ou des collections à partir soit de l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span>, soit d'un objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span>.<br />
<ul><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span></span> (élément) : récupère l'élément dont l'identifiant vaut la valeur passée en paramètre. Cette méthode ne renvoie qu'un élément car un id doit être unique dans le document. Ne s'applique qu'à l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span>.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span>s&eacute;lecteur CSS<span class="br0">&#41;</span></span> (élément) : cette méthode prend en paramètre une chaine de caractères correspondant à une syntaxe de sélecteur CSS et renvoie le premier élément du document correspondant à ce sélecteur.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByName</span><span class="br0">&#40;</span><span style="color: #0080ff;">name</span><span class="br0">&#41;</span></span> (collection) : récupère tous les éléments du document ayant un attribut HTML name correspondant au paramètre passé.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByTagName</span><span class="br0">&#40;</span><span style="color: #0080ff;">name</span><span class="br0">&#41;</span></span> (collection) : récupère tous les éléments du document dont le nom de balise correspond au paramètre passé.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByClassName</span><span class="br0">&#40;</span>classe<span class="br0">&#41;</span></span> (collection) : récupère tous les éléments du document ayant un attribut HTML class correspondant au paramètre passé.</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelectorAll</span><span class="br0">&#40;</span>s&eacute;lecteur CSS<span class="br0">&#41;</span></span> (collection) : cette méthode prend en paramètre une chaine de caractères correspondant à une syntaxe de sélecteur CSS et renvoie tous les éléments du document correspondant à ce sélecteur.</li></ul><br />
<br />
Vous l'aurez compris, ce qu'il est important de retenir avec ces méthodes, c'est d'abord quel type de donnée vous sera retourné, ensuite, que vous ne pouvez pas, avec JavaScript, faire de traitement par lot sur une collection, il est obligatoire de passer par une boucle pour traiter chaque élément séparément.<br />
<br />
N'hésitez pas à faire part de vos remarques et commentaires.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b488/methodes-recuperation-elements-dom/</guid>
		</item>
		<item>
			<title><![CDATA[L'Olympique Lyonnais n'aime pas les geek]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b458/l-olympique-lyonnais-n-aime-geek/</link>
			<pubDate>Wed, 22 Apr 2015 12:40:19 GMT</pubDate>
			<description><![CDATA[Comme chacun sait, s'il y a...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Comme chacun sait, s'il y a bien une chose sacrée chez les geeks, c'est &quot;la grande question sur la vie, l'univers et le reste&quot; et la réponse qui en résulte.<br />
Un monument de notre culture en somme et surtout, un symbole auquel il ne faut pas toucher.<br />
<br />
Mais voilà, Jean-Michel Aulas, qui ne respecte décidément rien et n'en est pas à son premier outrage, est fermement décidé à blasphémer et à fouler du pied ce qui est notre raison d'être.<br />
À l'instar des restaurateurs qui n'ont jamais (ou presque) de table numérotée 13, il a décidé que <b>son tout nouveau Stade des Lumières n'aurait pas de place 42</b> !<br />
Une offense qu'il essaye de camoufler en opposition supposée avec le club de Saint-Étienne (dans la Loire, département 42) mais nous ne sommes et ne serons pas dupes, c'est bien à toute notre communauté qu'il s'en prend !<br />
<br />
Boycottons donc ce stade qui ne nous respecte pas.<br />
<font size="1"><b><a href="http://www.lequipe.fr/Football/Actualites/Pas-de-42-au-grand-stade-de-l-ol/552848" target="_blank">Source</a></b></font></blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b458/l-olympique-lyonnais-n-aime-geek/</guid>
		</item>
		<item>
			<title>La saviez-vous : comment appliquer une méthode à un numérique littéral</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b429/saviez-appliquer-methode-numerique-litteral/</link>
			<pubDate>Wed, 08 Apr 2015 13:42:16 GMT</pubDate>
			<description>En JavaScript, il existe deux...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">En JavaScript, il existe deux méthodes pour appeler une méthode ou récupérer un propriété d'un objet : la syntaxe à crochets et la syntaxe pointée, la plus courante.<br />
Par exemple, pour récupérer la taille d'une chaine ou d'un tableau, on utilisera<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #FF0000;">'foo'</span>.<span style="color: #0080ff;">length</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 3</span>
console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span><span class="br0">&#93;</span>.<span style="color: #0080ff;">length</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 3</span></pre></td></tr></table></pre>
</div><br />
Avec la notation à crochets, la syntaxe deviendra<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #FF0000;">'foo'</span><span class="br0">&#91;</span><span style="color: #FF0000;">'length'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 3</span>
console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'length'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 3</span></pre></td></tr></table></pre>
</div><br />
Et cela fonctionne aussi bien avec les méthodes<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #FF0000;">'foo'</span><span class="br0">&#91;</span><span style="color: #FF0000;">'replace'</span><span class="br0">&#93;</span><span class="br0">&#40;</span><span style="color: #FF0000;">'foo'</span>, <span style="color: #FF0000;">'bar'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// bar</span>
console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'push'</span><span class="br0">&#93;</span><span class="br0">&#40;</span><span style="color: #cc66cc;">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 4</span></pre></td></tr></table></pre>
</div><br />
Tout cela fonctionne parfaitement avec tous les objets possibles.<br />
<br />
Tous ? Vraiment ?<br />
En fait, pas vraiment. Un problème survient avec les littéraux numériques entiers.<br />
En effet, si l'on fait<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #cc66cc;">12</span>.<span style="color: #cc66cc;">5</span>.<span style="color: #0080ff;">toFixed</span><span class="br0">&#40;</span><span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 12.50</span></pre>
</div>Mais<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #cc66cc;">12</span>.<span style="color: #0080ff;">toFixed</span><span class="br0">&#40;</span><span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// SyntaxError: identifier starts immediately after numeric literal</span></pre>
</div>c'est le drame... En effet, dans le cas des littéraux numériques, le point sert à séparer la partie entière de la partie décimale et dans le dernier exemple, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">toFixed</span><span class="br0">&#40;</span><span style="color: #cc66cc;">2</span><span class="br0">&#41;</span></span> n'est pas une partie décimale valide.<br />
<br />
L'astuce va être alors de mettre deux points à la suite et le tour est joué :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #cc66cc;">12</span>..<span style="color: #0080ff;">toFixed</span><span class="br0">&#40;</span><span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;  <span style="color: #808080;">// 12.50</span></pre>
</div><br />
Bien entendu, c'est une question que vous ne vous êtes jamais posée parce qu'en toute franchise, les cas où cela peut servir sont tellement rares qu'on se demande même s'il en existe ! :aie:<br />
Mais au moins, ça vous permettra de briller lors des dîners entre JavaScripteurs. ;)</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b429/saviez-appliquer-methode-numerique-litteral/</guid>
		</item>
		<item>
			<title><![CDATA[Comprendre les éléments HTML5 <datalist>]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b414/comprendre-elements-html5-datalist/</link>
			<pubDate>Thu, 02 Apr 2015 13:58:40 GMT</pubDate>
			<description><![CDATA[*L'autocomplétion native en...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="4"><b>L'autocomplétion native en HTML5</b></font><br />
<br />
L'autocomplétion, ou liste de suggestions, est l'une des fonctionnalités les plus courantes du développement Web.<br />
Il s'agit de suggérer des choix possibles lors de la saisie dans un champ de formulaire.<br />
<br />
Jusqu'à présent, il était obligatoire de développer cette fonctionnalité en JavaScript, mais grâce à HTML5, il est possible désormais de se passer de langage de script avec l'élément <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">datalist</span><span style="color: #0000ff;">&gt;</span></span></span>.<br />
Cet élément va permettre d'indiquer un certain nombre d'éléments prédéfinis à suggérer lors de la saisie.<br />
<br />
<b><a href="http://dmouronval.developpez.com/datalist/" target="_blank">Vous pouvez voir un exemple fonctionnel sur cette page</a></b>.<br />
<br />
<font size="3"><b>Syntaxe</b></font><br />
<br />
La syntaxe est un peu particulière car il va s'agir de lier un champ de formulaire avec un groupe d'options via des attributs, à l'image de ce qui existe déjà avec les attributs <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">for</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">usemap</span> des balises <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">label</span><span style="color: #0000ff;">&gt;</span></span></span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">img</span><span style="color: #0000ff;">&gt;</span></span></span>.<br />
Dans notre cas, la balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span><span style="color: #0000ff;">&gt;</span></span></span> devra posséder un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">list</span> dont la valeur vaudra celle de l'identifiant de la balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">datalist</span><span style="color: #0000ff;">&gt;</span></span></span> associée :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">list</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;maliste&quot;</span> /<span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">datalist</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;maliste&quot;</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">datalist</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div>Vous pouvez constater que la balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">datalist</span><span style="color: #0000ff;">&gt;</span></span></span> nécessite une balise fermante, car elle ne doit pas être vide : elle contiendra des balises <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span></span> qui vont correspondre à toutes les valeurs prédéfinies :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">list</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;langues&quot;</span> <span style="color: #0080ff;">placeholder</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Choisir une langue&quot;</span> <span style="color: #0080ff;">onfocus</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;this.value=''&quot;</span> /<span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">datalist</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;langues&quot;</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;fr&quot;</span><span style="color: #0000ff;">&gt;</span></span>Fran&ccedil;ais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;en&quot;</span><span style="color: #0000ff;">&gt;</span></span>Anglais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;de&quot;</span><span style="color: #0000ff;">&gt;</span></span>Allemand<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;bg&quot;</span><span style="color: #0000ff;">&gt;</span></span>Bulgare<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;hr&quot;</span><span style="color: #0000ff;">&gt;</span></span>Croate<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;da&quot;</span><span style="color: #0000ff;">&gt;</span></span>Danois<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;es&quot;</span><span style="color: #0000ff;">&gt;</span></span>Espagnol<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;et&quot;</span><span style="color: #0000ff;">&gt;</span></span>Estonien<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;fi&quot;</span><span style="color: #0000ff;">&gt;</span></span>Finnois<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;el&quot;</span><span style="color: #0000ff;">&gt;</span></span>Grec<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;hu&quot;</span><span style="color: #0000ff;">&gt;</span></span>Hongrois<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;ga&quot;</span><span style="color: #0000ff;">&gt;</span></span>Irlandais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;it&quot;</span><span style="color: #0000ff;">&gt;</span></span>Italien<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;lv&quot;</span><span style="color: #0000ff;">&gt;</span></span>Letton<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;lt&quot;</span><span style="color: #0000ff;">&gt;</span></span>Lituanien<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;mt&quot;</span><span style="color: #0000ff;">&gt;</span></span>Maltais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;nl&quot;</span><span style="color: #0000ff;">&gt;</span></span>N&eacute;erlandais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;pl&quot;</span><span style="color: #0000ff;">&gt;</span></span>Polonais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;pt&quot;</span><span style="color: #0000ff;">&gt;</span></span>Portugais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;ro&quot;</span><span style="color: #0000ff;">&gt;</span></span>Roumain<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;sk&quot;</span><span style="color: #0000ff;">&gt;</span></span>Slovaque<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;sl&quot;</span><span style="color: #0000ff;">&gt;</span></span>Slov&egrave;ne<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;sv&quot;</span><span style="color: #0000ff;">&gt;</span></span>Su&eacute;dois<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;cs&quot;</span><span style="color: #0000ff;">&gt;</span></span>Tch&egrave;que<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>Franglais<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">datalist</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div>L'on peut noter dans l'exemple ci-dessus que les options peuvent posséder un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">value</span>. Lorsque l'on sélectionne une valeur, si l'option associée possède un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">value</span>, c'est la valeur de cet attribut qui sera placée dans le champ texte, sinon, c'est le texte affiché par l'option.<br />
Il faut aussi noter que les options ne limitent pas la saisie dans le champ : il est toujours possible d'entrer la valeur que l'on veut même si celle-ci ne correspond à aucune option de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">datalist</span><span style="color: #0000ff;">&gt;</span></span></span>.<br />
<br />
:arrow: <b><a href="http://dmouronval.developpez.com/datalist/" target="_blank">Voir un exemple d'utilisation</a></b>.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b414/comprendre-elements-html5-datalist/</guid>
		</item>
		<item>
			<title>Comprendre les attributs personnalisés HTML5</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b374/comprendre-attributs-personnalises-html5/</link>
			<pubDate>Wed, 25 Mar 2015 10:06:11 GMT</pubDate>
			<description>Contrairement à XML, HTML...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Contrairement à XML, HTML impose les balises que l'on peut utiliser dans une page Web ainsi que les attributs possibles pour chacune d'elles. Rien d'extraordinaire à cela, c'est même sa raison d'être : structurer un document selon des balises ayant un sens sémantique.<br />
Sauf que cette restriction correspond de moins en moins aux besoins réels du Web moderne et des applications internet riches (<i>Rich Internet Applications</i> ou RIA en anglais) qui utilisent beaucoup de JavaScript et demandent d'avoir accès facilement à des données additionnelles de celles affichées sur la page.<br />
Pour pallier cette limitation, HTML5 permet désormais de créer des attributs personnalisés pour stocker les données dont on peut avoir besoin au cours de la durée de vie de la page.<br />
Ces attributs possèdent une syntaxe prédéfinie et une API JavaScript pour faciliter leur utilisation.<br />
<br />
<font size="4">Syntaxe</font><br />
Les attributs personnalisés (appelés aussi <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">data-*</span>) doivent impérativement commencer par <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">data-</span> puis peuvent contenir des lettres, des chiffres et les caractères tiret (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-</span>), point (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.</span>), underscore (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span>) ou deux-points (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">:</span>).<br />
Les lettres doivent obligatoirement être en minuscules, nous allons voir pourquoi.<br />
La valeur de ces attributs personnalisés est n'importe quelle valeur textuelles, car HTML n'étant pas un langage de programmation, la notion de type de donnée n'existe pas.<br />
<br />
<font size="4">API JavaScript <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dataset</span></font><br />
L'API JavaScript <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dataset</span> est celle qui va permettre de récupérer et affecter les valeurs de ces attributs.<br />
Tout objet JavaScript de type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span> possède une collection <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dataset</span> permettant de récupérer ou d'attribuer les valeurs existantes ou d'en affecter de nouvelles.<br />
Par exemple, si une balise possède un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">data-foo=&quot;bar&quot;</span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement.dataset.foo</span> aura pour valeur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&quot;bar&quot;</span>.<br />
Pour récupérer la valeur de l'attribut, il suffit donc d'utiliser le nom de l'attribut sans la partie commune <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">data-</span>.<br />
Enfin... il suffit, c'est vite dit.<br />
En effet, on a vu qu'il est possible de mettre des tirets dans le nom de l'attribut, or, le tiret, en JavaScript, c'est une soustraction, donc si on veut récupérer l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">data-foo-bar=&quot;baz&quot;</span>, la syntaxe <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement.dataset.foo-bar</span> signifiera en réalité la soustraction de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement.dataset.foo</span> et de la variable <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">bar</span>, aucune de ces deux valeurs n'étant supposée exister, cela provoquera une erreur.<br />
Cette problématique existe d'ailleurs pour la collection de styles CSS <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement.style</span>. Comme aux mêmes maux on applique les mêmes remèdes, la règle sera identique pour les attributs personnalisés que pour les styles : on applique une transformation camel case, à savoir que pour passer de HTML à JavaScript, on supprime le tiret et on remplace la lettre qui suit par sa majuscule et pour le passage JavaScript HTML, on transforme la majuscule en minuscule en plaçant un tiret devant. D'où l'interdiction des majuscules dans les attributs HTML.<br />
<br />
<font size="4">Exemple récapitulatif</font><br />
<br />
Vous trouverez sur cette page un exemple d'utilisation des attributs personnalisés : <b><a href="http://dmouronval.developpez.com/dataset/" target="_blank">Utilisation de l'API dataset</a></b>.<br />
<br />
En résumé, cette page présente un bouton dont le code HTML est le suivant<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:132px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span></span>
<span style="color: #339933;">    data-base<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Attribut base&quot;</span></span>
<span style="color: #339933;">    data-<span style="color: #cc66cc;">1</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Attribut num&eacute;rique&quot;</span></span>
<span style="color: #339933;">    data-avec-tiret<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Attribut avec tiret&quot;</span></span>
<span style="color: #339933;">    data-avec-tiret.et:points<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Attribut avec tiret et points&quot;</span></span>
<span style="color: #339933;">    data-MAJUSCULES<span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Attribut avec majuscules&quot;</span></span>
<span style="color: #339933;">    <span style="color: #0080ff;">onclick</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;read(this)&quot;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&gt;</span></span>Lire les attributs data de ce bouton<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div>et la fonction appelée au clic<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">function</span> <span style="color: #0080ff;">read</span><span class="br0">&#40;</span>elem<span class="br0">&#41;</span><span class="br0">&#123;</span>
	<span style="color: #0000ff;">for</span><span class="br0">&#40;</span><span style="color: #0000ff;">var</span> attribut <span style="color: #0000ff;">in</span> elem.dataset<span class="br0">&#41;</span><span class="br0">&#123;</span>
		console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span>attribut + <span style="color: #FF0000;">' : '</span> + elem.dataset<span class="br0">&#91;</span>attribut<span class="br0">&#93;</span><span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div>qui produira comme résultat<br />
<div style="margin: 20px; margin-top: 5px"><pre class="alt2" style="border: 1px inset; padding: 5px">majuscules : Attribut avec majuscules
avecTiret.et:points : Attribut avec tiret et points
avecTiret : Attribut avec tiret
1 : Attribut numérique
base : Attribut base</pre></div>Il est à noter que l'utilisation d'un nombre comme dans l'exemple est déconseillée, notamment parce que dans ce cas, la notation <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elem.dataset.1</span> pour récupérer sa valeur sera impossible, il faudra utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elem.dataset[1]</span> à la place.<br />
<br />
Il faut aussi garder en mémoire que l'API <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dataset</span> n'est compatible pour Internet Explorer qu'à partir de la version 11. Il faudra donc penser à créer ou utiliser un <i>polyfill</i> pour les versions antérieures.<br />
Pour s'assurer de la disponibilité de l'API, un simple test suffit<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">var</span> hasDataset = <span class="br0">&#40;</span><span style="color: #FF0000;">'dataset'</span> <span style="color: #0000ff;">in</span> <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">createElement</span><span class="br0">&#40;</span><span style="color: #FF0000;">'div'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</pre>
</div><br />
Certaines bibliothèques permettent un traitement compatible, par exemple la fonction <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.data()</span> de jQuery.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b374/comprendre-attributs-personnalises-html5/</guid>
		</item>
		<item>
			<title><![CDATA[HTML5 : quelques nouveautés de l'API DOM pour JavaScript]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b313/html5-quelques-nouveautes-l-api-dom-javascript/</link>
			<pubDate>Thu, 05 Mar 2015 14:47:26 GMT</pubDate>
			<description>*Note* : ce billet a été...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="1"><b>Note</b> : ce billet a été <a href="http://www.developpez.net/forums/d1257285/webmasters-developpement-web/javascript-ajax-typescript-dart/javascript/article-html5-quelques-nouveautes-l-api-dom-javascript/" target="_blank">initialement posté sur le forum</a> le 31 août 2012.</font><br />
<br />
La spécification HTML5 définit différents modules indépendants. Cette modularité a pour avantage de permettre de travailler sur certains aspects du standard sans avoir besoin de se soucier de l'état d'avancement des autres.<br />
Parmi ces modules, l'API DOM est celui qui permet de définir les propriétés et méthodes disponibles en JavaScript pour manipuler le DOM.<br />
Nous allons voir les différentes nouveautés particulièrement utiles de cette API.<br />
<br />
<font size="4"><b>Standardisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span></b></font><br />
<br />
Introduite par Internet Explorer 4 (de mémoire...), la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">innerHTML</span> permet de définir le contenu d'un élément en lui affectant sous forme de chaine une portion de code HTML.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">HTMLElement.innerHTML = <span style="color: #FF0000;">'&lt;p&gt;chaine HTML&lt;/p&gt;'</span>;</pre>
</div><i>Notez qu'il s'agit d'une propriété et non d'une méthode, on l'utilise donc sous forme d'une affectation et non comme un appel de fonction.</i><br />
Bien que propriétaire IE, cette propriété (sic) s'est largement répandue sur les autres navigateurs et est depuis longtemps largement compatible.<br />
Elle est désormais standardisée (<a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-innerhtml" target="_blank">innerHTML</a>) et fait pleinement partie de la spécification HTML5.<br />
<br />
<font size="4"><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByClassName</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b></font><br />
<br />
Nous connaissions déjà les classiques <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByName</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByTagName</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, mais beaucoup de développeurs ont longtemps regretté l'absence de possibilité de recherche d'éléments à partir d'un nom de classe (ce qui amenait souvent à utiliser une bibliothèque JavaScript pour pallier ce manque).<br />
C'est désormais rectifié avec l'apparition de la méthode <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">getElementsByClassName</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>.<br />
Cette méthode peut être appliquée à l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span> ou à un objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span>. Comme le 's' de 'elements' le laisse supposer, elle retourne une collection d'éléments (il est donc nécessaire de faire une boucle sur la collection pour traiter individuellement chaque élément).<br />
Il est possible de spécifier plusieurs noms de classe pour un élément séparés par des espaces, la méthode prend bien entendu en compte cette subtilité.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> coll = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementsByClassName</span><span class="br0">&#40;</span><span style="color: #FF0000;">'classe'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">var</span> coll = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'un_id'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">getElementsByClassName</span><span class="br0">&#40;</span><span style="color: #FF0000;">'classe'</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
Cette méthode est accessible sur tous les navigateurs récents, y compris Internet Explorer depuis sa version 8.<br />
<br />
<font size="4"><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> / <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelectorAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b></font><br />
<br />
Ces deux nouvelles méthodes font leur apparition avec un fonctionnement un peu différent des précédentes.<br />
Les méthodes du type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">getElement<span class="br0">&#91;</span>s<span class="br0">&#93;</span>By...</span> prennent comme argument une chaine correspondant au type d'élément recherché (un id, un nom de balise, de classe ou un name).<br />
Les méthodes <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelectorAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> prennent quant à elles en argument une chaine qui correspond à un sélecteur CSS.<br />
Normalement, toute chaine pouvant servir de sélecteur en CSS est acceptée, y compris les plus complexes. Nous ne listerons pas ici les différents sélecteurs possibles, je vous laisse faire vos propres tests.<br />
Ces méthodes s'appliquent soit à l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">document</span></span>, soit à un objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span>.<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> renvoie un élément HTML qui correspond au premier élément trouvé dans le DOM correspondant au sélecteur, son résultat peut donc être exploité directement.<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">querySelectorAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> renvoie une collection d'éléments HTML correspondant à tous les éléments correspondant au sélecteur. Pour traiter son résultat, il faudra donc faire une boucle sur chacun de ses membres.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:60px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> complexSelection = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">'.aChoisir ul[title=&quot;Liste &agrave; puce&quot;], li &gt; a[href^=www]'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">var</span> allImportantDivInMyParagraph = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'My'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">querySelectorAll</span><span class="br0">&#40;</span><span style="color: #FF0000;">'div.important'</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
Ces méthodes sont disponibles sur tous les navigateurs modernes y compris Internet Explorer depuis la version 9.<br />
<br />
<font size="4"><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">matchesSelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b></font><br />
<br />
Cette méthode permet de vérifier si un élément correspond à un sélecteur CSS. Tout comme les précédentes, elle prend en argument une chaine correspondant à un sélecteur. Elle renvoie un booléen.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:132px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> el1 = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'elem1'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">var</span> el2 = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementsByTagName</span><span class="br0">&#40;</span><span style="color: #FF0000;">'div'</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span>;
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>el1.<span style="color: #0080ff;">matchesSelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">'h1'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #808080;">// traitement si l'&eacute;l&eacute;ment est un titre de niveau 1</span>
<span class="br0">&#125;</span>
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>el2.<span style="color: #0080ff;">matchesSelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">'#toto'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #808080;">// traitement si la premi&egrave;re div du document poss&egrave;de l'id &quot;toto&quot;</span>
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div><br />
Cette méthode est disponible sur tous les navigateurs récents y compris Internet Explorer depuis la version 9, cependant, ils peuvent nécessiter l'utilisation des versions préfixées : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">mozMatchesSelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">webkitMatchesSelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">oMatchesSelector</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">msMatchesSelector()</span>.<br />
<br />
<font size="4"><b>L'interface <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">classList</span></b></font><br />
<br />
Jusqu'à présent, pour manipuler les classes CSS d'un élément, il était nécessaire d'utiliser des méthodes assez complexes, que ce soit pour vérifier la présence d'un nom de classe, pour en ajouter ou en retirer. Il fallait utiliser le plus souvent des expressions régulières et se méfier des erreurs possibles (typiquement, qu'une recherche sur &quot;classe&quot; ne renvoie pas vrai si l'élément possède la classe &quot;classeN&quot;).<br />
L'interface <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">classList</span> permet de simplifier tout cela.<br />
Elle s'applique à un élément HTML et renvoie une collection de ses noms de classe.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">var</span> allClasses = HTMLElement.classList;</pre>
</div><br />
Elle dispose aussi de plusieurs méthodes permettant de manipuler cette liste de classes :<br />
<ul><li style=""><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">add</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b> permet d'ajouter un nom de classe à l'élément ;</li><li style=""><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b> permet de retirer un nom de classe à l'élément ;</li><li style=""><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">toggle</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b> permet d'ajouter un nom de classe si l'élément ne la possède pas, à le retirer sinon ;</li><li style=""><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">contains</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span></b> permet de vérifier l'existence d'un nom de classe parmi celles de l'élément.</li></ul><br />
Cette interface est disponible sur tous les navigateurs modernes à l'exception d'Internet Explorer avant la version 10.<br />
<br />
<font size="4"><b>Conclusion</b></font><br />
<br />
Ces différentes propriétés et méthodes apportent beaucoup aux développeurs pour ce qui est de la manipulation du DOM. Cependant, il me semble que de nombreuses méthodes utiles ont été oubliées, que ce soit en rapport à l'insertion d'éléments dans le DOM, à la possibilité de faire des recherches en remontant l'arborescence (retrouver facilement un élément à partir d'un de ses descendants). Espérons que les futures implémentations combleront ces manques en s'inspirant, par exemple, des différentes bibliothèques JavaScript.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b313/html5-quelques-nouveautes-l-api-dom-javascript/</guid>
		</item>
		<item>
			<title>Performances de vos scripts : pensez à la console !</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b173/performances-vos-scripts-pensez-console/</link>
			<pubDate>Tue, 10 Feb 2015 12:59:19 GMT</pubDate>
			<description>Nous avons souvent besoin de...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Nous avons souvent besoin de tester la performance de nos scripts.<br />
Pour cela, nous rencontrons souvent des fonctions spécifiques basées sur l'objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Date()</span>, par exemple :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:96px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> d1, d2;
d1 = <span style="color: #0080ff;">Date</span>.<span style="color: #0080ff;">now</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span style="color: #808080;">// Code &agrave; tester ici</span>
d2 = <span style="color: #0080ff;">Date</span>.<span style="color: #0080ff;">now</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span>d2 - d1<span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
Ce qui est dommage, c'est d'utiliser la console uniquement pour afficher le résultat alors que celle-ci est capable de faire le travail toute seule !<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">console.<span style="color: #0080ff;">time</span><span class="br0">&#40;</span><span style="color: #FF0000;">'Nom du test'</span><span class="br0">&#41;</span>;
<span style="color: #808080;">// Code &agrave; tester</span>
console.<span style="color: #0080ff;">timeEnd</span><span class="br0">&#40;</span><span style="color: #FF0000;">'Nom du test'</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div>affichera directement le résultat souhaité.<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p168657d1423573101/general-developpement/algorithme-mathematiques/algorithmes-structures-donnees/compression-donnees-point-vue-algorithmique/time.png/" border="0" alt="Nom : time.png
Affichages : 265
Taille : 58,6 Ko"  /></div><br />
<u>Compatibilité</u> : Firefox (Firebug ou console native), Chrome, Opera et Safari.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b173/performances-vos-scripts-pensez-console/</guid>
		</item>
		<item>
			<title><![CDATA[Forcer le chargement d'un fichier en HTML5]]></title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b166/forcer-chargement-d-fichier-html5/</link>
			<pubDate>Thu, 05 Feb 2015 11:00:59 GMT</pubDate>
			<description>Lorsque vous proposez une...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Lorsque vous proposez une ressource aux visiteurs de votre site (images, documents PDF ou autres, etc.), les navigateurs vont essayer de les afficher <i>via</i> des fonctionnalités intégrées ou des extensions/plugins.<br />
Or, si vous souhaitez juste proposer ces ressources au téléchargement, vous serez obligé de &quot;forcer la main&quot; au navigateur côté serveur :<br />
<ul><li style=""><a href="http://php.developpez.com/faq/?page=fichiers_upload#fichiers_forcedownload" target="_blank">solution en PHP</a> ;</li><li style=""><a href="http://javaweb.developpez.com/faq/struts/?page=files#download" target="_blank">solution en Java</a> ;</li><li style=""><a href="http://dotnet.developpez.com/faq/asp/csharp/?page=navigationgeneral#downloadcurrentwindow" target="_blank">solution en C#</a>.</li></ul><br />
En gros, la technique consiste à associer au fichier souhaité un en-tête HTTP <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Content-Disposition</span> qui indiquera que celui-ci doit être téléchargé et non affiché.<br />
<br />
Bien entendu, si votre page est uniquement en (X)HTML, vous êtes de la revue ! La seule technique possible est de transformer votre fichier dans un format qui ne peut être affiché par le navigateur (la technique la plus classique étant de le compresser en archive zip).<br />
<br />
Mais cela, c'était avant.<br />
Car désormais, HTML5 vous permet de rendre vos fichiers téléchargeables, quel que soit leur format, de façon très simple.<br />
<br />
Il suffit d'utiliser l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">download</span>.<br />
<br />
<b><font size="4">Comment s'utilise cet attribut ?</font></b><br />
Le plus simplement du monde : en l'intégrant à la balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;a&gt;</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;area&gt;</span> !<br />
<br />
<b><font size="4">Quelle valeur donner à cet attribut ?</font></b><br />
Celle que vous souhaitez.<br />
Plus exactement, la valeur va correspondre au nom de fichier présélectionné dans la fenêtre de téléchargement, mais si vous ne précisez pas de valeur (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">download</span>) ou si vous mettez une valeur vide (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">download=&quot;&quot;</span>), alors le nom de fichier par défaut sera celui du fichier original.<br />
Exemples :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">a</span> <span style="color: #0080ff;">href</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;foo.png&quot;</span> download<span style="color: #0000ff;">&gt;</span></span>Enregistrer<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">a</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">a</span> <span style="color: #0080ff;">href</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;foo.png&quot;</span> <span style="color: #0080ff;">download</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;"><span style="color: #FF0000;">&quot;&quot;</span></span><span style="color: #0000ff;">&gt;</span></span>Enregistrer<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">a</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">a</span> <span style="color: #0080ff;">href</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;foo.png&quot;</span> <span style="color: #0080ff;">download</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;bar.png&quot;</span><span style="color: #0000ff;">&gt;</span></span>Enregistrer<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">a</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><br />
<b><font size="4">Quels types de fichiers peuvent être téléchargés ?</font></b><br />
Il n'y a pas de restriction sur les types de fichiers que vous pouvez proposer en téléchargement, néanmoins, ils devront respecter la <i>Same Origin Policy</i> (même domaine, même TLD, même sous domaine, même protocole, même port).<br />
Notez aussi que vous pouvez proposer en téléchargement des fichiers encodés en base64, donc en particulier des fichiers générés depuis le navigateur.<br />
<br />
<b><font size="4">Mais alors, mes codes serveur peuvent être téléchargés ?</font></b><br />
Bien sûr que non, heureusement !<br />
Si vous demandez un fichier .php par exemple sur le serveur, celui-ci sera <b>d'abord</b> interprété avant d'être envoyé. Ce sera donc le fichier généré qui sera récupéré et non le fichier contenant le code source.<br />
Il est donc en revanche possible de proposer de télécharger des fichiers images (par exemples) générés dynamiquement sur le serveur.<br />
<br />
<b><font size="4">Quel est le support des navigateur ?</font></b><br />
C'est le bémol concernant cet attribut...<br />
À l'heure actuelle, seuls Firefox, Chrome et Opera (en version desktop ou mobile) reconnaissent cet attribut, pour les autres navigateurs, vous devrez passer par une solution de contournement.<br />
<br />
<b><font size="4">Comment savoir si un navigateur prend en charge <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">download</span> ?</font></b><br />
Il est possible, avec JavaScript, de détecter si la fonctionnalité est supportée, pour cela, on crée un nouvel élément <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;a&gt;</span> et on vérifie s'il possède une propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">download</span> :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:120px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">var</span> testA = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">createElement</span><span class="br0">&#40;</span><span style="color: #FF0000;">'a'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #FF0000;">'download'</span> <span style="color: #0000ff;">in</span> testA<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #808080;">// Le navigateur supporte l'attribut download</span>
<span class="br0">&#125;</span>
<span style="color: #0000ff;">else</span><span class="br0">&#123;</span>
    <span style="color: #808080;">// Le navigateur ne supporte pas l'attribut download</span>
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div><br />
:fleche: <a href="http://dmouronval.developpez.com/download/" target="_blank">Voir une page d'exemple</a>.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b166/forcer-chargement-d-fichier-html5/</guid>
		</item>
		<item>
			<title>Des fenêtres modales natives en HTML5</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b165/fenetres-modales-natives-html5/</link>
			<pubDate>Thu, 05 Feb 2015 10:59:47 GMT</pubDate>
			<description>:salut: 
 
La création de...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">:salut:<br />
<br />
La création de fenêtres modales (ou pas du reste) a toujours été un besoin récurrent des développeurs Web.<br />
Certes, il existe les méthodes natives de JavaScript <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">alert</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">prompt</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">confirm</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, mais leur côté intrusif et surtout peu configurable les rend quasiment obsolètes.<br />
<br />
De nombreux tutoriels existent déjà pour créer ce type de fenêtres en JavaScript (celui de Soh Tanaka <a href="http://sohtanaka.developpez.com/tutoriels/javascript/creez-fenetre-modale-avec-css-et-jquery/" target="_blank">Créez une fenêtre modale avec CSS et jQuery</a> est l'un des plus populaires de developpez.com) ou en CSS (<a href="http://dmouronval.developpez.com/tutoriels/css/fenetre-modale-css3/" target="_blank">Créer une fenêtre modale avec CSS 3</a> ou <a href="http://nosmoking.developpez.com/tutoriels/css/galerie-css3-sans-javascript/" target="_blank">Galerie au click sans JavaScript</a>). Mais cela demande encore beaucoup de code et de technique pour être mis en œuvre.<br />
<br />
Encore une fois, HTML5 vient à votre secours avec l'élément <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span>dialog<span style="color: #0000ff;">&gt;</span></span></span> !<br />
<br />
Cet élément permet de créer des fenêtres, modales ou non, très simplement. La balise peut contenir n'importe quel contenu HTML. Elle peut être affichée ou masquée en utilisant son API JavaScript et il est possible de lui appliquer des styles facilement, ainsi qu'au masque extérieur en cas de fenêtre modale en utilisant le pseudoélément CSS <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">::backdrop</span>.<br />
<br />
La spécification de la balise indique qu'elle peut posséder un attribut de type booléen <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">open</span> qui indique si la fenêtre doit être visible ou non.<br />
Son interface JavaScript prévoit une propriété booléenne <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">open</span> et une propriété de type chaine <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">returnValue</span>.<br />
Attention, la propriété JavaScript <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">open</span> correspond à l'état de la fenêtre au moment où elle est appelée, l'attribut HTML correspond à l'état à la création de la page !<br />
La propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">returnValue</span> permet de définir un message à renvoyer au script.<br />
D'autre part, trois méthodes permettent de manipuler la fenêtre : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">show()</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">showModal()</span> permettent d'ouvrir la fenêtre en mode normal ou modal, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">close([message])</span> permet de la fermer avec comme paramètre optionnel un message à affecter à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">returnValue</span>.<br />
Enfin, seul l'événement <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">close</span> ne semble supporté (et encore, uniquement disponible via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">addEventListener()</span>, aucun attribut d'événement spécifique ne semble pris en compte).<br />
<br />
<b>Exemple de code</b><br />
L'exemple suivant vous montre comment il est possible d'utiliser la balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span>dialog<span style="color: #0000ff;">&gt;</span></span></span><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">&lt;!doctype html&gt;</span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">html</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">head</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">meta</span> <span style="color: #0080ff;">charset</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;utf-8&quot;</span> /<span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">title</span><span style="color: #0000ff;">&gt;</span></span>Fen&ecirc;tre modale HTML5<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">title</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #0000ff;">&lt;style</span><span style="color: #0000ff;">&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">#promptCompat</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">display</span>: <span style="color: #0080ff;">none</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">#promptCompat</span><span style="color: #339933;">.no_dialog</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">box-shadow</span>: <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">5</span>px <span style="color: #cc66cc;">2</span>px <span style="color: #800000;">red</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">padding</span>: <span style="color: #cc66cc;">10</span>px;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">display</span>: <span style="color: #0080ff;">block</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">text-align</span>: <span style="color: #0080ff;">center</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">font-weight</span>: <span style="color: #0080ff;">bold</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">.boutons</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">padding</span>: <span style="color: #cc66cc;">10</span>px;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dialog<span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">border-radius</span>: <span style="color: #cc66cc;">10</span>px;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">box-shadow</span>: <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">3</span>px <span style="color: #cc66cc;">7</span>px rgba<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0.3</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dialog::backdrop<span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">background-color</span>: rgba<span class="br0">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0.6</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&lt;/style&gt;</span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">head</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">body</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">h1</span><span style="color: #0000ff;">&gt;</span></span>Fen&ecirc;tre modale HTML5<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">h1</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">p</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;promptCompat&quot;</span><span style="color: #0000ff;">&gt;</span></span>Votre navigateur ne pend pas en charge les balises <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">code</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;">&amp;lt;</span>dialog&gt;<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">code</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">p</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span>dialog <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;mydialog&quot;</span> open<span style="color: #0000ff;">&gt;</span></span>
		Voici une fen&ecirc;tre d'information !<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">br</span> /<span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">p</span><span style="color: #0000ff;">&gt;</span></span>Elle peut contenir tout type de balises HTML.<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">p</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>Remplir ce champ pour modifier le message de fermeture <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;closeMsg&quot;</span> <span style="color: #0080ff;">placeholder</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Y compris des &eacute;l&eacute;ments de formulaire&quot;</span> /<span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;boutons&quot;</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span> <span style="color: #0080ff;">onclick</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;$dialog.close()&quot;</span><span style="color: #0000ff;">&gt;</span></span>Fermer<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;">&amp;nbsp;</span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span> <span style="color: #0080ff;">onclick</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;$dialog.returnValue = document.getElementById('closeMsg').value&quot;</span><span style="color: #0000ff;">&gt;</span></span>D&eacute;finir un message<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span>dialog<span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;boutons&quot;</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span> <span style="color: #0080ff;">onclick</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;$dialog.show()&quot;</span><span style="color: #0000ff;">&gt;</span></span>Ouvrir en mode normal<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;">&amp;nbsp;</span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span> <span style="color: #0080ff;">onclick</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;$dialog.showModal()&quot;</span><span style="color: #0000ff;">&gt;</span></span>Ouvrir en mode modal<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span> <span style="color: #0080ff;">class</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;boutons&quot;</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span> <span style="color: #0080ff;">onclick</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;alert($dialog.open)&quot;</span><span style="color: #0000ff;">&gt;</span></span>V&eacute;rifier l'attribut <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">code</span><span style="color: #0000ff;">&gt;</span></span>open<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">code</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #0000ff;">&lt;script&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">var</span> <span style="color: #0000ff;">$</span>dialog = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'mydialog'</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span><span class="br0">&#40;</span>!<span class="br0">&#40;</span><span style="color: #FF0000;">'show'</span> <span style="color: #0000ff;">in</span> <span style="color: #0000ff;">$</span>dialog<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'promptCompat'</span><span class="br0">&#41;</span>.className = <span style="color: #FF0000;">'no_dialog'</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$</span>dialog.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">'close'</span>, <span style="color: #0000ff;">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span><span style="color: #FF0000;">'Fermeture. '</span>, <span style="color: #0000ff;">this</span>.returnValue<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&lt;/script&gt;</span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">body</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">html</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><a href="http://dmouronval.developpez.com/dialog.html" target="_blank">Voir cet exemple en ligne</a>.<br />
<br />
<b>Support des navigateurs</b><br />
À l'heure actuelle, seule Chrome Canari semble proposer un support correct pour cette balise en activant l'option &quot;Activer les fonctionnalités expérimentales de Web Platform&quot; dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">chrome:flags</span>. Chrome en version standard reconnait la balise (toujours en activant l'option) mais l'affichage est bogué.<br />
<br />
<font size="1"><b>Sources : <a href="http://updates.html5rocks.com/2013/09/dialog-element-Modals-made-easy" target="_blank">HTML5 Rocks</a>, <a href="http://demo.agektmr.com/dialog/" target="_blank">page d'exemple documentée</a>, <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#the-dialog-element" target="_blank">Spécifications WHATWG</a>.</b></font></blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b165/fenetres-modales-natives-html5/</guid>
		</item>
		<item>
			<title>Évolution de la propriété CSS position : la valeur sticky</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b164/evolution-propriete-css-position-sticky/</link>
			<pubDate>Thu, 05 Feb 2015 10:58:19 GMT</pubDate>
			<description>Tous les développeurs Web...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Tous les développeurs Web sont supposés connaître <a href="http://torgar.developpez.com/glossaire-css/?page=page_6#LVI-B-3" target="_blank">la propriété CSS <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">position</span></a>.<br />
Pour rappel, cette propriété permet de déterminer comment un élément HTML sera intégré dans le document.<br />
<br />
Cette propriété accepte quatre valeurs :<br />
<ul><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">static</span> : c'est la valeur par défaut, un élément avec cette valeur sera intégré dans le flux normal ;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">relative</span> : permet de positionner l'élément en fonction de l'emplacement qu'il aurait dû avoir dans le flux ;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">absolute</span> : permet de positionner l'élément par rapport à son ancêtre positionné (dont la valeur de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">position</span> est différente de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">static</span>) le plus proche ;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fixed</span> : permet de positionner l'élément à un emplacement fixe de la fenêtre d'affichage (l'élément ne se déplace pas lors du scroll).</li></ul><br />
<br />
Si ces quatre valeurs sont largement suffisantes pour la plupart des pages Web, certaines pratiques apparaissent et se généralisent qui justifieraient d'étendre les valeurs possibles.<br />
<br />
Parmi ces pratiques, celle consistant à intégrer un élément dans la page qui suit le défilement tant qu'il est visible puis se bloque à une position limite est de plus en plus répandue (<i>sticky elements</i>). Pour en voir un exemple, regardez <a href="http://css.developpez.com/tutoriels/glossaire-proprietes-css/?page=prefixes" target="_blank">comment se comporte la table des matières dans les articles de developpez.com</a>.<br />
Pour réaliser cela, nous sommes actuellement obligés d'utiliser JavaScript et de modifier la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">position</span> en fonction de la valeur du scroll.<br />
<br />
C'est pour cela que les développeurs de Chrome ont eu l'idée d'ajouter une valeur possible pour la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">position</span>, la valeur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sticky</span>.<br />
<br />
<b>Exemple :</b><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code css :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:132px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#sticky_element</span><span class="br0">&#123;</span>
  <span style="color: #0000ff;">position</span>: <span style="color: #0080ff;">-webkit-sticky</span>;
  <span style="color: #0000ff;">position</span>: <span style="color: #0080ff;">-moz-sticky</span>;
  <span style="color: #0000ff;">position</span>: <span style="color: #0080ff;">-ms-sticky</span>;
  <span style="color: #0000ff;">position</span>: <span style="color: #0080ff;">-o-sticky</span>;
  <span style="color: #0000ff;">position</span>: <span style="color: #0080ff;">sticky</span>;
  <span style="color: #0000ff;">top</span>: <span style="color: #cc66cc;">15</span>px;
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div><br />
:arrow: <b><a href="http://jsfiddle.net/eeeo6zjx/" target="_blank">Voir un exemple sur JS Fiddle</a></b>.<br />
<br />
Dans cet exemple, l'élément dont l'id est <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sticky_element</span> va se déplacer en même temps que la page tant qu'il sera à plus de 15 pixels du haut de la page, puis se figera pour rester toujours visible.<br />
Notez l'utilisation des préfixes vendeurs et leur ordre. Les préfixes vendeurs permettent d'utiliser des fonctionnalités (CSS ou JavaScript) qui sont encore expérimentales. Comme le comportement de ces fonctionnalités est susceptible d'évoluer en fonction de leur implémentation, on déclare toujours la propriété non préfixée (donc définitive et supposée conforme à la spécification) en dernier afin que celle-ci écrase les précédentes si elle est disponible.<br />
<br />
Malheureusement, le support navigateur est quasiment inexistant à l'heure actuelle et elle ne fait pas partie des spécifications du W3C.<br />
La propriété est bien reconnue en version préfixée pour Chrome et Safari sur iOS 6, mais pour le reste, elle n'est supportée que par les versions de développement de Chrome (Canary) et Firefox (Nightly).<br />
Cependant, cela reste une belle perspective pour un futur relativement proche.<br />
<br />
<b><font size="1">Sources : <a href="http://www.red-team-design.com/position-sticky-might-be-the-next-best-thing" target="_blank">RedTeamDesign</a> - <a href="http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit" target="_blank">HTML5Rocks</a></font></b></blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b164/evolution-propriete-css-position-sticky/</guid>
		</item>
		<item>
			<title>Désactiver vos champs de formulaires HTML5 par groupes</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b163/desactiver-vos-champs-formulaires-html5-groupes/</link>
			<pubDate>Thu, 05 Feb 2015 10:56:29 GMT</pubDate>
			<description>:salut: 
 
Comme vous le...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">:salut:<br />
<br />
Comme vous le savez certainement, pour désactiver qu'un champ de formulaire soit inactif, vous devez lui attribuer un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">disabled</span>.<br />
Notez qu'il s'agit d'un attribut de type booléen. Ces attributs booléens ont la particularité que leur seule présence suffit à activer la fonctionnalité.<br />
<br />
Si vous optez pour une syntaxe XHTML (c'est-à-dire conforme aux règles XML), vous devez lui attribuer une valeur (la seule autorisée pour que le document soit valide est <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&quot;disabled&quot;</span>, mais n'importe qu'elle autre valeur aura le même effet si ce n'est que le document ne sera plus valide) :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;total&quot;</span> <span style="color: #0080ff;">disabled</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;disabled&quot;</span> /<span style="color: #0000ff;">&gt;</span></span></pre>
</div><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;total&quot;</span> <span style="color: #0080ff;">disabled</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;foo&quot;</span> /<span style="color: #0000ff;">&gt;</span></span><span style="color: #808080;">&lt;!-- aura le m&ecirc;me effet --&gt;</span></pre>
</div><br />
Si au contraire vous optez pour une syntaxe HTML, alors seul l'attribut est nécessaire :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;total&quot;</span> disabled<span style="color: #0000ff;">&gt;</span></span></pre>
</div><br />
Le problème que vous pouvez rencontrer, c'est dans le cas où vous ayez plusieurs champs à désactiver de la sorte. Bien entendu, multiplier les attributs <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">disabled</span> est faisable, mais un peu lourd.<br />
Heureusement, HTML5 arrive à votre secours.<br />
En effet, il est désormais possible d'affecter l'attribut à une balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;fieldset&gt;</span>. Cette balise a pour but de regrouper des champs ayant une finalité commune.<br />
Ainsi, en affectant l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">disabled</span> à cette balise, tous les champs enfants seront désactivés sans avoir besoin de le préciser pour chacun d'eux :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:156px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">fieldset</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;groupe&quot;</span> <span style="color: #0080ff;">disabled</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;disabled&quot;</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;foo&quot;</span> /<span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">type</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;checkbox&quot;</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;bar&quot;</span> /<span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">select</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;toto&quot;</span><span style="color: #0000ff;">&gt;</span></span>
        <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;1&quot;</span><span style="color: #0000ff;">&gt;</span></span>Valeur 1<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
        <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;2&quot;</span><span style="color: #0000ff;">&gt;</span></span>Valeur 2<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
        <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;3&quot;</span><span style="color: #0000ff;">&gt;</span></span>Valeur 3<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
        <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">option</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;4&quot;</span><span style="color: #0000ff;">&gt;</span></span>Valeur 4<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">option</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">select</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">fieldset</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><br />
Enfin, vous aurez peut-être besoin d'activer ou de désactiver ces champs en fonction des actions de l'utilisateur. Vous pourrez le faire uniquement en JavaScript puisque ni HTML ni CSS ne prévoient d'interaction permettant d'influer sur cet attribut.<br />
De la même manière, la propriété JavaScript <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">disabled</span> d'un objet de type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">HTMLElement</span> correspondant à cet attribut est de type booléenne.<br />
Notez que cette propriété prend comme valeur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">true</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">false</span> mais que le transtypage dynamique de JavaScript permet un comportement similaire à celui de HTML : si vous affectez à cette propriété n'importe qu'elle valeur non équivalente à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">false</span> (par exemple la chaine <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">'disabled'</span>), l'élément sera désactivé, sinon, il sera activé.<br />
Dans notre exemple précédent, il est donc possible de créer un bouton permettant d'activer ou non un groupe de champs de formulaire :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">button</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;switchActif&quot;</span><span style="color: #0000ff;">&gt;</span></span>Activer / d&eacute;sactiver le groupe<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">button</span><span style="color: #0000ff;">&gt;</span></span></pre>
</div><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code javascript :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'switchActif'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">onclick</span> = <span style="color: #0000ff;">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #0000ff;">var</span> <span style="color: #0000ff;">$</span>groupe = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">'groupe'</span><span class="br0">&#41;</span>;
    <span style="color: #0000ff;">$</span>groupe.disabled = !<span style="color: #0000ff;">$</span>groupe.disabled;
<span class="br0">&#125;</span>;</pre></td></tr></table></pre>
</div><br />
<a href="http://dmouronval.developpez.com/disabled.html" target="_blank">Voir un exemple en ligne</a>.</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b163/desactiver-vos-champs-formulaires-html5-groupes/</guid>
		</item>
		<item>
			<title>HTML Media Capture : prenez des photos depuis un champ de formulaire</title>
			<link>https://www.developpez.net/forums/blogs/243304-bovino/b162/html-media-capture-prenez-photos-champ-formulaire/</link>
			<pubDate>Thu, 05 Feb 2015 10:54:34 GMT</pubDate>
			<description>*HTML Media Capture et...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><b><font size="5">HTML Media Capture et l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">capture</span></font></b><br />
<b><font size="1">Mettez à profit les périphériques de votre mobile pour remplir les champ file</font></b><br />
<br />
HTML5 apporte de nombreuses nouvelles fonctionnalités, notamment concernant les formulaires.<br />
<br />
Nous allons voir dans ce billet la spécification <i>HTML Media Capture</i>.<br />
Celle-ci permet d'élargir les capacités des champs de formulaires de type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">file</span>.<br />
Jusqu'à présent, les champs de formulaires de type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">file</span> permettaient juste d'ouvrir une fenêtre pour récupérer dans le système de fichiers celui (ou ceux) à envoyer avec le formulaire.<br />
Il est dorénavant possible d'utiliser ces mêmes champs pour utiliser l'un des périphériques de capture (audio, vidéo ou image) pour créer le fichier à envoyer.<br />
<br />
<b><font size="4">Comment le mettre en œuvre ?</font></b><br />
La mise en place d'un tel système est particulièrement simple.<br />
Il suffit d'ajouter au champ un attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">capture</span> et le tour est joué ! Cet attribut étant de type booléen, c'est-à-dire que sa seule présence (sans valeur ou quelle que soit sa valeur) suffit à indiquer au navigateur le comportement souhaité.<br />
<br />
Enfin... il suffit... pas tant que ça en fait.<br />
En réalité, l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">capture</span> n'est pas suffisant, en effet, ce seul attribut ne permet pas de savoir quel type de media est demandé, donc quel périphérique utiliser.<br />
Il est donc nécessaire de préciser aussi l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">accept</span> avec une valeur correspondant au type mime souhaité.<br />
<br />
Notez que l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">capture</span> n'oblige pas l'utilisateur à utiliser un périphérique : il lui est demandé s'il veut envoyer un fichier existant ou s'il veut utiliser le périphérique approprié.<br />
<br />
<b><font size="4">Exemples.</font></b><br />
Voici les trois cas possibles d'utilisation à l'heure actuelle :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code html :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">form</span> <span style="color: #0080ff;">action</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;...&quot;</span> <span style="color: #0080ff;">method</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;post&quot;</span> <span style="color: #0080ff;">enctype</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;multipart/form-data&quot;</span><span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #808080;">&lt;!-- Pour une image (appareil photo) --&gt;</span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">type</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;file&quot;</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;image&quot;</span> <span style="color: #0080ff;">accept</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;image/*&quot;</span> capture<span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #808080;">&lt;!-- Pour une vid&eacute;o (cam&eacute;ra) --&gt;</span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">type</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;file&quot;</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;video&quot;</span> <span style="color: #0080ff;">accept</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;video/*&quot;</span> capture<span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #808080;">&lt;!-- Pour un son (micro) --&gt;</span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">type</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;file&quot;</span> <span style="color: #0080ff;">name</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;son&quot;</span> <span style="color: #0080ff;">accept</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;audio/*&quot;</span> capture<span style="color: #0000ff;">&gt;</span></span>
    <span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">input</span> <span style="color: #0080ff;">type</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;submit&quot;</span> <span style="color: #0080ff;">value</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;Upload&quot;</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">form</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><br />
<b><font size="4">Compatibilité.</font></b><br />
À l'heure actuelle, seuls les navigateurs pour mobiles et tablettes semblent supporter cette fonctionnalité.<br />
:arrow: <a href="http://mobilehtml5.org/" target="_blank">Voir la table de compatibilité pour mobiles</a>.<br />
Mais gageons que les versions <i>desktop</i> des navigateurs vont l'implémenter rapidement.<br />
<br />
:arrow: <a href="http://www.w3.org/TR/html-media-capture/" target="_blank">Voir les spécifications du W3C</a> (comprenant des exemples plus avancés).</blockquote>

]]></content:encoded>
			<dc:creator>Bovino</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/243304-bovino/b162/html-media-capture-prenez-photos-champ-formulaire/</guid>
		</item>
	</channel>
</rss>
