<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://mirmodynamics.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mirmo Dynamics - Tag - library</title>
  <link>http://mirmodynamics.com/</link>
  <atom:link href="http://mirmodynamics.com/feed/tag/library/rss2" rel="self" type="application/rss+xml"/>
  <description>Si tu kiffes pas reunoi, t'écoutes pas et puis c'est tout.</description>
  <language>en</language>
  <pubDate>Sun, 14 Mar 2010 19:59:01 +0100</pubDate>
  <copyright>2003-2009 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Éviter les appels de fonction en double en javascript</title>
    <link>http://mirmodynamics.com/post/2007/04/12/Eviter-les-appels-de-fonction-en-double-en-javascript</link>
    <guid isPermaLink="false">urn:md5:4ade4fc5c913f47948358bd4a9c7f804</guid>
    <pubDate>Thu, 12 Apr 2007 13:22:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>javascript</category><category>jquery</category><category>library</category><category>rigolo</category>    
    <description>    &lt;p&gt;Dans un accès de désespoir vu l'activité débordante de ce blog en ce moment, je me lance et je vous propose cette petite librairie javascript qui va vous permettre d'éviter les appels de fonction en double:&lt;/p&gt;

&lt;pre&gt;
var Defer = {
	config: {
		defaultTimeout: 1000
	},
	stack: {},
	schedule: function(id, fn, timeout) {
		if (typeof(timeout) == 'undefined') {
			timeout = Defer.config.defaultTimeout;
		}
		if (typeof(Defer.stack[id]) == 'undefined') {
			Defer.stack[id] = {defer: false, fn: fn, timeout: timeout };
			window.setTimeout('Defer.execute(\'' + id + '\')', timeout);
		} else {
			Defer.stack[id].defer = true;
		}
	},
	execute: function(id) {
		if (typeof(Defer.stack[id]) != 'undefined' &amp;amp;&amp;amp; !Defer.stack[id].defer) {
			Defer.stack[id].fn();
			Defer.stack[id] = undefined;
		} else {
			Defer.stack[id].defer = false;
			window.setTimeout('Defer.execute(\'' + id + '\')', Defer.stack[id].timeout);
		}
	},
};
&lt;/pre&gt;


&lt;p&gt;On peut l'utiliser ainsi par exemple (&lt;a href=&quot;http://jquery.com/&quot;&gt;jquery&lt;/a&gt; requis):&lt;/p&gt;

&lt;pre&gt;
$(document).ready(function() {
	$('#nickname').keyup(function() {
		Defer.schedule('chknickname', function() {
			$.get('/account/check_nickname.php', { nickname: $('#nickname').val() }, function(data) {
				data = eval(data);
				$('#nickname_availability').html(data ? 'Pseudo disponible' : 'Pseudo indisponible');
			});
		}, 2000);
	});
});
&lt;/pre&gt;


&lt;p&gt;Concrétement, ce bout de code attache à un &lt;code&gt;input&lt;/code&gt; un événement qui ne sera executé que s'il n'est pas répété avant une certaine période (2 secondes ici). C'est à dire qu'on évite de faire une requête xmlhttp à chaque &lt;code&gt;keyup&lt;/code&gt;, on attend plutot que l'utilisateur arrête de taper un moment avant de balancer la sauce. A noter que de par la méthode utiliser, l'espace de nommage d'execution de la fonction change (par exemple ici, on ne peut pas utiliser &lt;code&gt;this&lt;/code&gt; pour accéder a l'&lt;code&gt;input&lt;/code&gt;).&lt;/p&gt;


&lt;p&gt;Voila voila.&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2007/04/12/Eviter-les-appels-de-fonction-en-double-en-javascript#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2007/04/12/Eviter-les-appels-de-fonction-en-double-en-javascript#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/757</wfw:commentRss>
      </item>
    
</channel>
</rss>