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

<channel>
	<title>Sebastián Barría &#187; Javascript</title>
	<atom:link href="http://www.sebastianbarria.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sebastianbarria.com</link>
	<description>Desarrollo web y multimedia</description>
	<lastBuildDate>Wed, 11 Jan 2012 18:17:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mootools vs jQuery</title>
		<link>http://www.sebastianbarria.com/web/mootools-vs-jquery/</link>
		<comments>http://www.sebastianbarria.com/web/mootools-vs-jquery/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 23:21:33 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Recomiendo]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=144</guid>
		<description><![CDATA[Este post es en parte para realizar una comparativa entre <a href="http://mootools.net/" target="_blank">Mootools</a> y <a href="http://www.jquery.com/" target="_blank">jQuery&#8230;</a>. Ambas son librerías de javascript que permiten hacer cosas como animar objetos, seleccionar elementos, etc. en cada página donde se ejecuten, es decir que en la práctica lo que hacen es entregarnos funciones pre-hechas para realizar las tareas de javascript y así permitir, entre otras cosas, simplicarnos la vida y compatibilizar los navegadores. Ambas sirven para lo mismo y de hecho funcionan de manera bastante similar.
Muchas personas no conocen Mootools y, como generalmente ven más sitios o ejemplos hechos en jQuery creen que &#8220;es mejor&#8221;,]]></description>
			<content:encoded><![CDATA[<p>Este post es en parte para realizar una comparativa entre <a href="http://mootools.net/" target="_blank">Mootools</a> y <a href="http://www.jquery.com/" target="_blank">jQuery</a>. Ambas son librerías de javascript que permiten hacer cosas como animar objetos, seleccionar elementos, etc. en cada página donde se ejecuten, es decir que en la práctica lo que hacen es entregarnos funciones pre-hechas para realizar las tareas de javascript y así permitir, entre otras cosas, simplicarnos la vida y compatibilizar los navegadores. Ambas sirven para lo mismo y de hecho funcionan de manera bastante similar.</p>
<p>Muchas personas no conocen Mootools y, como generalmente ven más sitios o ejemplos hechos en jQuery creen que &#8220;es mejor&#8221;, pero a mi juicio Mootools es mucho mejor que jQuery. De hecho, NUNCA he visto algo que se pueda hacer en jQuery y que no se pueda hacer en Mootools (por favor si alguien sabe de algo que lo publique acá), y en teoría no tendría porqué jQuery ser mejor que Mootools en ese sentido si ambos están basados únicamente en lo que permite hacer javascript.</p>
<h2>El gran plus de jQuery: su documentación</h2>
<p>Me he encontrado que cuando quiero buscar algo relacionado a jQuery me es bastante fácil encontrar una solución o ejemplos, a diferencia de Mootools, que su documentación es bastante pobre (sólo lo justo y necesario). Además de eso, mootools tiene unos ejemplos online muy antiguos (de la versión 1.1) y para las últimas versiones ofrecen descargar los ejemplos o revisar su funcionalidad en una interfaz llamada <a href="http://jsfiddle.net/" target="_blank">jsFiddle</a>, en la cual también se encuentran ejemplos de las demás librerías como <a href="http://developer.yahoo.com/yui/" target="_blank">YUI</a> o <a href="http://www.prototypejs.org/" target="_blank">prototype</a>.</p>
<p>Por su parte jQuery ofrece cosas mucho más simples como <a href="http://jqueryui.com/" target="_blank">jQueryUI</a> o su listado de <a href="http://plugins.jquery.com/" target="_blank">plugins</a>, los cuales ofrecen ejemplos bastante claros, concretos y simples. Quizás por eso es tan popular jQuery, porque es mucho más fácil encontrar una librería que se ajuste a las necesidades de algún proyecto, la cual puedes implementar incluso con poco conocimiento. De todas formas Mootools no se queda atrás y ofrece <a href="http://mootools.net/forge/" target="_blank">Mootools Forge</a> (que en la práctica es un repositorio de plugins) y existen sitios como <a href="http://www.jourmoly.com.ar/category/mootools-en-espanol/" target="_blank">JOURMOLY</a> que tiene muchos ejemplos realmente útilies y que le &#8220;salvan el pellejo&#8221;.</p>
<h2>El gran plus de Mootools: su funcionalidad</h2>
<p>Vamos directo con un ejemplo: cuando tengo un link y quiero que al hacer click haga submit a un formulario simplemente pongo lo siguiente en mootools:</p>
<pre>$('id_del_formulario').submit();</pre>
<p>En jQuery esto no funciona. Es algo complejo de explicarselo a humanos (yo no soy programador de profesión asique tampoco me gusta explicar las cosas como programador), pero en resumidas cuentas, mootools permite seleccionar un objeto con $ y eso al final es lo mismo que decir document.getElementById. En jQuery, al usar el $ el objeto se convierte en un objeto de jQuery y si quiero hacer un submit tengo que usar una función interna que trae jQuery para dichos efectos. Al ser un objeto de jQuery aparentemente no puede interactuar con todas las funciones básicas de javascript, y eso a la larga es confuso.</p>
<blockquote><p>NOTA: puede ser que en las últimas versiones de jQuery esto ya no suceda. Me tocó hace tiempo hacer algo como esto y últimamente no me ha tocado desarrollar en jQuery, asique si estoy mal avísenme.</p></blockquote>
<p>Lo importante es que Mootools es más flexible en ese sentido. Es bastante fácil de implementar y tiene métodos muy simples. Como es obvio, también, hay cosas que son más simples en jQuery, asique creo que en ese sentido es mejor que cada uno decida.</p>
<h2>Mi opinión personal</h2>
<p>Por mi parte recomiendo Mootools. Personalmente no me gusta jQuery (es como escoger entre WordPress o Joomla, entre los cuales prefiero WordPress), y encuentro que es un poco más engorroso de entender y programar.</p>
<p>Personalmente uso un archivo que pesa 213k pero que contiene TODO Mootools (ya que hay un Mootools &#8220;básico&#8221; y un &#8220;core&#8221; que tiene más funcionalidades) y con eso puedo hacer todo lo que quiera en cualquier sitio. Como los .js se cargan una sola vez y luego se toman del caché el impacto que esto produce es imperceptible y además de esa manera no se llama a n archivos (como sucede en jQuery, donde se carga la base y luego se van cargando librerías para efectos, desplegables, carruseles, etc.), sino que se carga sólo 1, lo cual optimiza bastante la carga de la página.</p>
<p>Con esto inicio el debate por si alguien se quiere sumar&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/mootools-vs-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Automatizar las frases por defecto en los campos de texto</title>
		<link>http://www.sebastianbarria.com/web/automatizar-las-frases-por-defecto-en-los-campos-de-texto/</link>
		<comments>http://www.sebastianbarria.com/web/automatizar-las-frases-por-defecto-en-los-campos-de-texto/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 00:44:01 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=112</guid>
		<description><![CDATA[Imagino que más de alguna vez habrán visto los típicos campos de texto con alguna frase como &#8220;ingresa tu email aquí&#8221; y que cuando le hacen click esa frase desaparece por completo dejando el input vacío. Y lógicamente que cuando me salgo de boton vuelve la frase original.
Acá les dejo una forma automática de hacerlo, en javascript, por supuesto:
<pre>var inputs=$$('#formulario_de_contacto .text','#formulario_de_contacto textarea');
for(i=0;i&#60;inputs.length;i++){
	inputs[i].txtOriginal=inputs[i].value;
	inputs[i].onfocus=function(){
		if(this.value==this.txtOriginal){ this.value=""; }
	}
	inputs[i].onblur=function(){
		if(this.value==""){ this.value=this.txtOriginal; }
	}
}
&#8230;</pre>
No hay mucho que explicar de este código: primero selecciona todos los textarea y elementos con la clase &#8220;text&#8221; (que es la que]]></description>
			<content:encoded><![CDATA[<p>Imagino que más de alguna vez habrán visto los típicos campos de texto con alguna frase como &#8220;ingresa tu email aquí&#8221; y que cuando le hacen click esa frase desaparece por completo dejando el input vacío. Y lógicamente que cuando me salgo de boton vuelve la frase original.</p>
<p>Acá les dejo una forma automática de hacerlo, en javascript, por supuesto:</p>
<pre>var inputs=$$('#formulario_de_contacto .text','#formulario_de_contacto textarea');
for(i=0;i&lt;inputs.length;i++){
	inputs[i].txtOriginal=inputs[i].value;
	inputs[i].onfocus=function(){
		if(this.value==this.txtOriginal){ this.value=""; }
	}
	inputs[i].onblur=function(){
		if(this.value==""){ this.value=this.txtOriginal; }
	}
}
</pre>
<p>No hay mucho que explicar de este código: primero selecciona todos los textarea y elementos con la clase &#8220;text&#8221; (que es la que yo uso para diferenciar los inputs type=&#8221;text&#8221; de los otros inputs) y luego a cada uno de esos elementos les lee el value original y lo guarda en una variable txtOriginal, para luego decirle que cuando se ponga el cursor sobre ellos revise si tienen el mismo texto que el original o si está vacío para hacer la acción correspondiente.</p>
<p>El código anterior utiliza mootools para optimizar la búsqueda de los inputs de texto y los textarea dentro del código. Si no saben como se utiliza mootools, vean <a href="/javascript/tutorial-de-mootools-seleccionar-objetos/">este tutorial</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/automatizar-las-frases-por-defecto-en-los-campos-de-texto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Detectar si se cargó un archivo .js</title>
		<link>http://www.sebastianbarria.com/web/detectar-si-se-cargo-un-archivo-js/</link>
		<comments>http://www.sebastianbarria.com/web/detectar-si-se-cargo-un-archivo-js/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 00:29:31 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=95</guid>
		<description><![CDATA[Basándome en lo planteado <a href="/web/comprobar-si-existe-una-variable-en-javascript/">en este post</a>, esta vez les presento este &#8220;truquito&#8221;. No hay que ser muy inteligente tampoco para que a uno se le ocurra esto, asique no pretendo lucirme ni nada.
Hay veces en que llamo a una función pero en la página donde estoy no he cargado el archivo .js correspondiente y por lo tanto el navegador me tira un error. ¿Cómo solucionarlo?: fácil (siempre digo lo mismo). Tenemos que agregar al final del archivo js una variable cualquiera:
<pre>var archivoCargado=1;&#8230;</pre>
Y luego, antes de llamar a la funcion que necesitamos le preguntamos si esa]]></description>
			<content:encoded><![CDATA[<p>Basándome en lo planteado <a href="/web/comprobar-si-existe-una-variable-en-javascript/">en este post</a>, esta vez les presento este &#8220;truquito&#8221;. No hay que ser muy inteligente tampoco para que a uno se le ocurra esto, asique no pretendo lucirme ni nada.</p>
<p>Hay veces en que llamo a una función pero en la página donde estoy no he cargado el archivo .js correspondiente y por lo tanto el navegador me tira un error. ¿Cómo solucionarlo?: fácil (siempre digo lo mismo). Tenemos que agregar al final del archivo js una variable cualquiera:</p>
<pre>var archivoCargado=1;</pre>
<p>Y luego, antes de llamar a la funcion que necesitamos le preguntamos si esa variable existe (sin que nos arroje un error). Si la variable existe es porque se cargó el archivo, y si no existe será &#8220;<em>undefined</em>&#8220;, osea que no ha sido definida, osea que el archivo no se cargó. Algo así:</p>
<pre>if(typeof(archivoCargado)!="undefined"){ ejecutarFuncion(); }</pre>
<p> <img src='http://www.sebastianbarria.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8230;dudas?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/detectar-si-se-cargo-un-archivo-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comprobar si existe una variable en Javascript</title>
		<link>http://www.sebastianbarria.com/web/comprobar-si-existe-una-variable-en-javascript/</link>
		<comments>http://www.sebastianbarria.com/web/comprobar-si-existe-una-variable-en-javascript/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 00:23:12 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=91</guid>
		<description><![CDATA[Por culpa de este tipo de errores muchas veces podemos pasarnos horas tratando de encontrar el error.
Claro, yo se que existe el famoso firebug y alguna que otra alternativa para ayudarnos a encontrar los errores, pero es mejor prevenir que perder tiempo en guevadas, jajaja.
La cosa es simple: &#8220;¿cómo saber si existe una variable en javascript sin recibir un error de vuelta si es que no existe?&#8221;. Claro, porque si pregunto simplemente:
<pre>if(miVariable){ alert("si existe"); }
else{ alert("no existe"); }
</pre>
claramente voy a recibir un error diciendo que <em>miVariable&#8230;</em> no está definida. Osea que teóricamente nunca nos vamos]]></description>
			<content:encoded><![CDATA[<p>Por culpa de este tipo de errores muchas veces podemos pasarnos horas tratando de encontrar el error.</p>
<p>Claro, yo se que existe el famoso firebug y alguna que otra alternativa para ayudarnos a encontrar los errores, pero es mejor prevenir que perder tiempo en guevadas, jajaja.</p>
<p>La cosa es simple: &#8220;¿cómo saber si existe una variable en javascript sin recibir un error de vuelta si es que no existe?&#8221;. Claro, porque si pregunto simplemente:</p>
<pre>if(miVariable){ alert("si existe"); }
else{ alert("no existe"); }
</pre>
<p>claramente voy a recibir un error diciendo que <em>miVariable</em> no está definida. Osea que teóricamente nunca nos vamos a salvar del error (se supone que estamos consultando si la variable existe o no para no recibir un error más adelante).</p>
<p>Asique la solución es simple. Tendremos que consultar lo siguiente:</p>
<pre>if(typeof(miVariable) != "undefined"){ alert("si existe"); }
else{ alert("no existe"); }
</pre>
<p>&#8230;y <em>voilá</em>. No tendremos más el tedioso problema.</p>
<p>Suerte!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://www.esqsoft.com/javascript-help/javascript-testing-defined-undefined-variables.htm</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/comprobar-si-existe-una-variable-en-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Solución para los PNG transparentes en IE6</title>
		<link>http://www.sebastianbarria.com/css/solucion-para-los-png-transparentes-en-ie6/</link>
		<comments>http://www.sebastianbarria.com/css/solucion-para-los-png-transparentes-en-ie6/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 04:47:59 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Bugs]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=93</guid>
		<description><![CDATA[Generalmente publico artículos y desarrollos míos, pero esta vez es algo así como uns servicio de utilidad pública. Esta vez puedo dar fe de que es la solución definitiva, pues lo probé y funcionó todo a la perfección.
Navegando por ahí encontré el sitio de DillerDesign, donde publican su &#8220;experimento&#8221; <strong>DD_belatedPNG</strong>. El tema es que esa librería de JavaScript REALMENTE soluciona el famoso problema de los PNG transparentes.
Anteriormente yo había publicado un <a href="/web/pngs-transparentes-en-ie6/">artículo al respecto&#8230;</a>, pero la solución que planteaba, si bien funcionaba, no servía para cuando existían fondos transparentes que se repetían. En fin. Esta librería]]></description>
			<content:encoded><![CDATA[<blockquote><p>Generalmente publico artículos y desarrollos míos, pero esta vez es algo así como uns servicio de utilidad pública. Esta vez puedo dar fe de que es la solución definitiva, pues lo probé y funcionó todo a la perfección.</p></blockquote>
<p>Navegando por ahí encontré el sitio de DillerDesign, donde publican su &#8220;experimento&#8221; <strong>DD_belatedPNG</strong>. El tema es que esa librería de JavaScript REALMENTE soluciona el famoso problema de los PNG transparentes.</p>
<p>Anteriormente yo había publicado un <a href="/web/pngs-transparentes-en-ie6/">artículo al respecto</a>, pero la solución que planteaba, si bien funcionaba, no servía para cuando existían fondos transparentes que se repetían. En fin. Esta librería sirve tanto para imágenes incrustadas directamente en el código a través de la etiqueta IMG, o a través de un fondo de CSS.</p>
<p>Está en inglés, pero acá les dejo el link directo: <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/" target="_blank">http://www.dillerdesign.com/experiment/DD_belatedPNG/</a></p>
<p>Suerte!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/css/solucion-para-los-png-transparentes-en-ie6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>setTimeout() y setInterval()</title>
		<link>http://www.sebastianbarria.com/web/settimeout-y-setinterval/</link>
		<comments>http://www.sebastianbarria.com/web/settimeout-y-setinterval/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 19:14:45 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=76</guid>
		<description><![CDATA[Aunque no son muy conocidas por quienes están comenzando en el tema de la programación, estas dos funciones son una maravilla. Son funciones existentes en varios lenguajes de programación, como en Javascript y en Actionscript, que nos sacarán de varios apuros y nos permitirán optimizar y mejorar nuestros códigos.
Su objetivo principal es el de definir un tiempo para esperar a ejecutar alguna otra función. Por ejemplo, si necesito mostrar una alerta y que desaparezca en 3 segundos más, o si necesito que un reloj vaya actualizándose cada 1 segundo.
<h3>setTimeout()&#8230;</h3>
Esta función permite definir un tiempo específico para que]]></description>
			<content:encoded><![CDATA[<p>Aunque no son muy conocidas por quienes están comenzando en el tema de la programación, estas dos funciones son una maravilla. Son funciones existentes en varios lenguajes de programación, como en Javascript y en Actionscript, que nos sacarán de varios apuros y nos permitirán optimizar y mejorar nuestros códigos.</p>
<p>Su objetivo principal es el de definir un tiempo para esperar a ejecutar alguna otra función. Por ejemplo, si necesito mostrar una alerta y que desaparezca en 3 segundos más, o si necesito que un reloj vaya actualizándose cada 1 segundo.</p>
<h3>setTimeout()</h3>
<p>Esta función permite definir un tiempo específico para que se ejecute una tarea una sola vez. Se utiliza de la siguiente manera:</p>
<pre>var t = setTimeout(funcion,tiempo);</pre>
<h3>setInterval()</h3>
<p>Este función permite ejecutar una tarea infinitas veces cada una cierta cantidad de tiempo. Se utiliza de la siguiente manera:</p>
<pre>var t = setTimeout(funcion,tiempo);</pre>
<blockquote><p>El tiempo de ambas funciones se mide en milisegundos, es decir, que 1000=1 segundo</p></blockquote>
<h3>clearTimeout()</h3>
<p>Esta función permite anular alguna llamada específica a setTimeout() o setInterval(). Se utiliza de la siguiente manera:</p>
<pre>clearTimeout(t);</pre>
<p>Donde <em>t</em> corresponde a la variable que se definió para almacenar la llamada a alguna de las otras dos funciones.</p>
<p>Hay que tener cuidado de saber bien donde se definió la variable <em>t</em>, pues si está definida dentro de otra función o de un movieClip (en el caso de Actionscript), no va a funcionar si no se &#8220;rutea&#8221; bien la llamada a esa variable.</p>
<h3>Vamos a un ejemplo práctico</h3>
<h4>Javascript</h4>
<p>Vamos a realizar un contador como ejemplo. Este es el código que debemos utilizar:</p>
<pre>var tiempoInicial=10;
function tiempo(){
    tiempoInicial--;
    document.getElementById('tiempo').innerHTML=tiempoInicial;
    if(tiempoInicial==0){
        clearTimeout(t);
        alert("fin");
    }
}
var t = setInterval(tiempo,1000);
</pre>
<p>Al principio del script se define la variable &#8220;tiempoInicial&#8221;, que será la misma que iremos utilizando para ir contando hacia atrás.</p>
<blockquote><p>La variable no se puede llamar &#8220;tiempo&#8221;, pues la función que utilizaremos se llama tiempo y si ambas se llamasen igual javascript no sabría si nos estamos refiriendo a la función o a la variable.</p>
<p>El div dentro del cual se mostrarán los segundos restantes se llama tiempo también, y este no generará ningún conflicto con la funcion tiempo, ya que no es un elemento de javascript, sino uno de HTML.</p></blockquote>
<p>Luego definimos la función tiempo, que lo que hace es restar un segundo a la variable tiempoInicial, mostrarla dentro del DIV cuyo ID es &#8220;tiempo&#8221;, y luego verificar: si el tiempo es igual a 0, anula el intervalo de tiempo que se define inicialmente, es decir que deja de llamar a la función tiempo() cada un segundo.</p>
<p>Bajo la función se llama a la función setInterval y se define que el tiempo de intervalo sea cada un segundo (1000 ms). Antes de llamarla, se define la variable <em>t</em>, que es la que almacenará el intervalo para luego poder anularlo con clearTimeout desde dentro de la función.</p>
<p>Como este javascript se carga al principio de la página, en la práctica suceden 3 cosas:</p>
<ol>
<li>se define el tiempo inicial</li>
<li>se define la función tiempo()</li>
<li>se establece el intervalo de tiempo</li>
</ol>
<p>Estas cosas no vuelven a ejecutarse porque la página ya se cargó, pero el setInterval deja en memoria que se debe llamar a la función tiempo() cada un segundo eternamente, o hasta que se anule con la función clearInterval.</p>
<p><a href="/wp-content/uploads/2010/03/contador_javascript.zip">Descargar el archivo de ejemplo</a></p>
<p>Actionscript</p>
<p>Para actionscript la función es exactamente la misma, solamente que el número de segundos restantes debe mostrarse de otra manera. No voy a profundizar mucho en esta versión pero les dejo el archivo de ejemplo para que lo analicen ustedes mismos.</p>
<p><a href="/wp-content/uploads/2010/03/contador_actionscript.zip">Descargar el archivo de ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/settimeout-y-setinterval/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Checklist para un buen desarrollo Web</title>
		<link>http://www.sebastianbarria.com/web/checklist-para-un-buen-desarrollo-web/</link>
		<comments>http://www.sebastianbarria.com/web/checklist-para-un-buen-desarrollo-web/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 19:02:52 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Teoría]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=71</guid>
		<description><![CDATA[Si ya hablé de <a href="/web/pauta-para-disenos-web-en-photoshop/">pautas para diseño Web</a>, esta vez le toca al desarrollo (maqueteo).
Al momento de maquetear un sitio Web es necesario fijarse en varios aspectos, que no siempre son atendidos por los desarrolladores. Algunas veces por descuido, otras por no saber.
Acá les dejo este checklist que puede servir de ayudamemoria para los que maquetean. La idea no es hacer una buena maqueta, sino una profesional:
<h3>Código HTML</h3>
El código <a href="/web/html-y-css-correcta-utilizacion-de-codigo-y-estilos/">debe ser limpio y claro&#8230;</a>. Debe estar hecho con DIVs y no tablas. La idea es que se usen las etiquetas correctas en los lugares]]></description>
			<content:encoded><![CDATA[<p>Si ya hablé de <a href="/web/pauta-para-disenos-web-en-photoshop/">pautas para diseño Web</a>, esta vez le toca al desarrollo (maqueteo).</p>
<p>Al momento de maquetear un sitio Web es necesario fijarse en varios aspectos, que no siempre son atendidos por los desarrolladores. Algunas veces por descuido, otras por no saber.</p>
<p>Acá les dejo este checklist que puede servir de ayudamemoria para los que maquetean. La idea no es hacer una buena maqueta, sino una profesional:</p>
<h3>Código HTML</h3>
<p>El código <a href="/web/html-y-css-correcta-utilizacion-de-codigo-y-estilos/">debe ser limpio y claro</a>. Debe estar hecho con DIVs y no tablas. La idea es que se usen las etiquetas correctas en los lugares correctos: si vamos a poner un título que no sea <em>div</em>, sino que sea un H1, H2 o H3 (dependiendo de su importancia); si ponemos un <em>input</em> en un formulario, el texto asociado debe ir dentro de una etiqueta <em>LABEL</em> y debe tener el atributo <em>FOR</em> indicando al <em>ID</em> del <em>input</em>; etc.</p>
<p>Además de todo esto, el código debe ser <a href="http://validator.w3.org/" target="_blank">validado por la w3c</a>.</p>
<h3>CSS</h3>
<p>Los estilos CSS deben estar correctamente ordenados (ordénenlos como quieran, ¡pero ordénenlos!). Deben fijarse en que no hayan atributos innecesarios ni duplicados, ni estilos que no se estén usando. Por supuesto que deben estar bien tabulados y deben ser lo más compacto posible (para ahorrar espacio).</p>
<p>También deben estar <a href="http://jigsaw.w3.org/css-validator/" target="_blank">validados por la w3c</a>.</p>
<h3>Codificación</h3>
<p>Este tema es probablemente de los más complejos y desconocidos. En realidad no es tan complejo si se explica claramente, pero siempre cuesta entenderlo. Asique para ahorrarme palabras les dejo <a href="http://www.vda2.com/tecnologia/codificacion_de_caracteres" target="_blank">esta excelente explicación</a>. En resumen, la idea es siempre utilizar UTF-8 como codificación ya que es más universal, y de esa manera se asegurarán que al momento de integrar la maqueta con algún lenguaje de programación (php, asp, etc.) todo va a funcionar perfecto. Sino, mejor ni les digo el problemita que van a tener con las &#8220;ñ&#8221;, los acentos y algunos otros caracteres.</p>
<h3>Tamaño de texto y deformidades</h3>
<p>Generalemente, la maqueta se debe hacer respecto a algún diseño (probablemente un PSD). Lo que digo con respecto al tamaño del texto es que deben asegurarse que los tamaños de texto que aparezcan el los PSD deben ser <strong>EXACTAMENTE IGUALES</strong> al que se ven en sus maquetas (de hecho la maqueta debe ser <strong>EXCATAMENTE </strong>igual que el diseño: esa es la idea de un buen maqueteo, sino ¿para qué entregar un diseño?).</p>
<p>Si se fijan también, los navegadores (no todos) hacen crecer el texto de la página al girar la rueda del mouse presionando la tecla CTRL. En esos casos, debemos asegurarnos que los textos que vayan creciendo no se salgan de sus espacios y que no se monten sobre otros textos. Generalemente este problema surge cuando se dan alturas fijas a los DIVs, y la solución se consigue utilizando <a href="/web/firefox-e-ie-vs-desarrollador-solucionando-bugs/">algunos trucos que ya he mencionado</a> (Divs expandibles).</p>
<h3>Png&#8217;s transparentes en IE6</h3>
<p>El típico problema, que aunque todos los desarrolladores estemos en contra, vamos a tener que solucionar hasta que este famoso navegador (y no por ser bueno) esté fuera del mercado.</p>
<p>Debemos cerciorarnos de que las transparencias <a href="/web/pngs-transparentes-en-ie6/">se vean bien en IE6</a>.</p>
<h3>Correcta visión en todos los navegadores</h3>
<p>Antes de comenzar el desarrollo (o durante) debemos tener claro para que navegadores debemos maquetear. Idealmente es para todos, pero por lo menos hay que regirse por los 4 más populares: Firefox, Internet Explorer (6,7 y 8), Safari y Chrome.</p>
<p>Como lo he mencionado varias veces, el objetivo es que se vea <strong>EXACTAMENTE IGUAL</strong> en todos los navegadores, incluyendo espacios separaciones, fondos, transparencias, tamaños, etc. Se puede, incluso sin usar los típicos hacks de CSS que andan dando vueltas por internet.</p>
<h3>Tabulación y eliminación de espacios</h3>
<p>Una vez que nuestra maqueta está terminada, tenemos que mirar su código.</p>
<p>Debemos fijarnos que esté correctamente tabulada (con tabs y no con espacios) y que no tenga saltos de linea adicionales. Por ejemplo, si utilizamos Dreamweaver, debemos cerciorarnos que en OPCIONES / FORMATO DE CODIGO esté marcado &#8220;indentar con 1 tab&#8221;. Si no lo hacemos así, tendremos miles de caracteres adicionales que pueden hacer incluso que una página pese un 25% o 30% adicional (y cuando hablamos de sitios con muchas visitas eso cuenta).</p>
<h3>Limpieza de CSS y JS</h3>
<p>Lo mismo que comenté antes de los CSS. Debemos realizar una limpieza final a los CSS y JS que hayamos utilizado para que no sobre nada y para que estén correctamente ordenados.</p>
<h3>Ortografía</h3>
<p>Cae de maduro, pero no para todos. Hay que fijarse en que la ortografía de nuestra maqueta o desarrollo sea correcta. He visto sitios por ahí que llegan a ser vergonzosos, y eso dice mucho de una empresa o persona.</p>
<h3>JS y CSS de la cabecera</h3>
<p>Debemos fijarnos que los CSS y JS que forman parte de nuestro desarrollo estén incluídos dentro de la etiqueta HEAD. La única excepción que podríamos hacer es en los casos de JS o CSS adicionales, como por ejemplo, los de Google Analytics, que idealmente deberían ir al final (para permitir que la página se cargue primero).</p>
<p>Debemos fijarnos también que no hayan funciones o estilos escritos en el código HTML (<a href="/web/html-y-css-correcta-utilizacion-de-codigo-y-estilos/">¿por qué?</a>).</p>
<h3>Links, hover y visted</h3>
<p>Otro detallito más que muchas veces pasa desapercibido. Debemos fijarnos que <strong>no existan links rotos</strong> y también que pasa con nuestros links al momento de ser visitados. Los colores de los :visited y :hover deben estar definidos en nuestros estilos CSS.</p>
<h3>Navegación</h3>
<p>Una vez que está todo listo, es hora de navegar nuestro sitio, y probar que todo esté en orden. Es mejor que nos demos cuenta de cualquier detalle antes de lanzar un sitio a que se den cuenta nuestros visitantes de los errores.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/checklist-para-un-buen-desarrollo-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Limitar caracteres en un textarea</title>
		<link>http://www.sebastianbarria.com/web/limitar-caracteres-en-un-textarea/</link>
		<comments>http://www.sebastianbarria.com/web/limitar-caracteres-en-un-textarea/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 18:35:55 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/web/62/</guid>
		<description><![CDATA[A partir de la función mostrada en <a href="/web/prohibir-ciertos-caracteres-en-un-input-de-texto/">el post anterior</a>, se me ocurrió hacer una función que limitara la cantidad de caracteres de un área de texto (<em>textarea</em>).
Como muchos ya deben saber, los <em>textarea </em>no permiten el uso del atributo <em>maxlength</em>, que poseen los inputs de texto. Pero para simular eso vamos a recurrir a la siguiente funcion:
<pre>function maxLength(e,obj,num) {
    k = (document.all) ? e.keyCode : e.which;
    if (k==8 &#124;&#124; k==0){ return true; }
    else{ return obj.value.length&#60;num; }
}&#8230;</pre>
Para aplicar esta función, es necesario incluir lo siguiente en cualquier textarea:]]></description>
			<content:encoded><![CDATA[<p>A partir de la función mostrada en <a href="/web/prohibir-ciertos-caracteres-en-un-input-de-texto/">el post anterior</a>, se me ocurrió hacer una función que limitara la cantidad de caracteres de un área de texto (<em>textarea</em>).</p>
<p>Como muchos ya deben saber, los <em>textarea </em>no permiten el uso del atributo <em>maxlength</em>, que poseen los inputs de texto. Pero para simular eso vamos a recurrir a la siguiente funcion:</p>
<pre>function maxLength(e,obj,num) {
    k = (document.all) ? e.keyCode : e.which;
    if (k==8 || k==0){ return true; }
    else{ return obj.value.length&lt;num; }
}</pre>
<p>Para aplicar esta función, es necesario incluir lo siguiente en cualquier textarea:</p>
<pre>&lt;textarea onkeypress="return maxLength(event,this,50);"&gt;&lt;/textarea&gt;</pre>
<p>En este ejemplo, le estamos diciendo a la función que limite el ingreso de textos a 50 caracteres.</p>
<p>Junto con la función se le envía la variable event, que corresponde al evento que está en memoria de la tecla presionada. Con esto, permitiremos que todavía se puedan utilizar las teclas de movimiento y borrado una vez que se supera el máximo de caracteres. La variable this corresponde al textarea, para que el javascript sepa sobre quien se está aplicando la función.</p>
<p>Una de las limitaciones de este sistema es precisamente que está hecho en javascript, y como es sabido, el javascript es fácil de engañar, pero aún así sigue siendo una buena alternativa para validar nuestros formularios. En todo caso, recuerden siempre validar los formularios en el php, asp o lo que sea que reciba los datos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/limitar-caracteres-en-un-textarea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prohibir ciertos caracteres en un input de texto</title>
		<link>http://www.sebastianbarria.com/web/prohibir-ciertos-caracteres-en-un-input-de-texto/</link>
		<comments>http://www.sebastianbarria.com/web/prohibir-ciertos-caracteres-en-un-input-de-texto/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 18:34:41 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=61</guid>
		<description><![CDATA[Esta función hecha en javascript permite prohibir ingresar ciertos caracteres en un input de texto. En este caso específico, no deja ingresar caracteres que no sean números.
La escencia de la función es simple: recibe un evento; comprueba si es un número y devuelve una respuesta.
Sin  más preámbulo, la función es la siguiente:
<pre>function isNumber(e) {
    k = (document.all) ? e.keyCode : e.which;
    if (k==8 &#124;&#124; k==0) return true;
    patron = /\d/;
    n = String.fromCharCode(k);
    return patron.test(n);
}</pre>
<h3>¿Cómo usarla?&#8230;</h3>
Como decía anteriormente, esta función debe recibir un evento. En este caso es necesario llamarla]]></description>
			<content:encoded><![CDATA[<p>Esta función hecha en javascript permite prohibir ingresar ciertos caracteres en un input de texto. En este caso específico, no deja ingresar caracteres que no sean números.</p>
<p>La escencia de la función es simple: recibe un evento; comprueba si es un número y devuelve una respuesta.</p>
<p>Sin  más preámbulo, la función es la siguiente:</p>
<pre>function isNumber(e) {
    k = (document.all) ? e.keyCode : e.which;
    if (k==8 || k==0) return true;
    patron = /\d/;
    n = String.fromCharCode(k);
    return patron.test(n);
}</pre>
<h3>¿Cómo usarla?</h3>
<p>Como decía anteriormente, esta función debe recibir un evento. En este caso es necesario llamarla desde la misma casilla de texto, de la siguiente manera:</p>
<pre>&lt;input type="text" onkeypress="return isNumber(event);" /&gt;</pre>
<p>La manera en que estamos llamando a la función es a través del evento onkeypress. A este input se le pueden agregar todos los demás atributos que sean necesarios. Incluso es bueno definir el atributo maxlength para limitar la cantidad de caracteres que puede ingresar el usuario.</p>
<p>Como dato, la línea que consulta si<em> k==8</em> o si <em>k==0</em>, lo hace para saber si la tecla presionada es el <em>backspace </em>(8) o las flechas, y <em>delete </em>(0), en cuyo caso retorna <em>true</em>, para autorizar que se tecleen.</p>
<h3>Como modificar/ampliar esta función</h3>
<p>Si se fijan, hay una línea que dice:</p>
<pre>patron = /\d/;</pre>
<p>Esta línea define el patrón a buscar. Es decir, que si el caracter ingresado (tecla presionada) está dentro de esta gama de caracteres, está autorizada a ser escrita en la casilla de texto. De otra forma, no se puede ingresar el caracter.</p>
<p>Otras posibilidades de patrones son las siguientes:</p>
<p><strong>/\w/</strong> = Permite cualquier caracter alfanumérico, incluyendo el guión bajo (_). Es equivalente a [a-zA-Z0-9_].</p>
<p><strong>/\W/</strong> = Permite cualquier caracter que NO sea alfanumérico. Equivalente a [^a-zA-Z0-9_].</p>
<p><strong>/\D/</strong> = Permite cualquier número que NO sea un número. Equivalente a [^0-9].</p>
<p><strong>[xyz]</strong> = permite cualquier caracter x, y o z.</p>
<p><strong>[0-9]</strong> = permite cualquier número entre 0 y 9.</p>
<p><strong>[a-z]</strong> = permite cualquier letra entre a y z (minúsculas).</p>
<p><strong>[^a-k]</strong> = permite cualquier letra que NO esté entre a y k (minúsculas).</p>
<p>Existen muchas otras posibilidades de patrones, que corresponden a expresiones regulares en javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/web/prohibir-ciertos-caracteres-en-un-input-de-texto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial de Mootools: Animaciones simples</title>
		<link>http://www.sebastianbarria.com/javascript/tutorial-de-mootools-animaciones-simples/</link>
		<comments>http://www.sebastianbarria.com/javascript/tutorial-de-mootools-animaciones-simples/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 18:31:40 +0000</pubDate>
		<dc:creator>Sebastian Barria</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.sebastianbarria.com/?p=59</guid>
		<description><![CDATA[En este segundo mini-tutorial, explicaré como comenzar a jugar con las animaciones que ofrece <em>Mootools</em>: fades y slides.
Lo bueno es que con esta librería es posible comenzar a hacer cosas con una simple línea o función, y luego podemos ir detallando y complejizando más nuestra animación. Ahora veremos como.
Otro de los beneficios que ofrece <em>Mootools </em>es la posibilidad de hacer animaciones de una manera muy simple. Este es un ejemplo (suponiendo que tenemos un DIV <em>id=&#8221;div_animable&#8221;</em>:
<pre>$('div_animable').slide('out');&#8230;</pre>
Este tipo de función se puede aplicar a cualquier objeto. Por ejemplo, si tenemos un botón, podríamos decirle que]]></description>
			<content:encoded><![CDATA[<p>En este segundo mini-tutorial, explicaré como comenzar a jugar con las animaciones que ofrece <em>Mootools</em>: fades y slides.</p>
<p>Lo bueno es que con esta librería es posible comenzar a hacer cosas con una simple línea o función, y luego podemos ir detallando y complejizando más nuestra animación. Ahora veremos como.</p>
<p>Otro de los beneficios que ofrece <em>Mootools </em>es la posibilidad de hacer animaciones de una manera muy simple. Este es un ejemplo (suponiendo que tenemos un DIV <em>id=&#8221;div_animable&#8221;</em>:</p>
<pre>$('div_animable').slide('out');</pre>
<p>Este tipo de función se puede aplicar a cualquier objeto. Por ejemplo, si tenemos un botón, podríamos decirle que al hacerle click, se esconda un DIV específico:</p>
<pre>&lt;input type="button" value="Esconder DIV" onclick="$('div_animable').slide('out');" /&gt;</pre>
<p>Los efectos más simples que ofrece <em>Mootools </em>son<em> slide()</em> y<em> fade()</em>. Ambos funcionan de la misma manera y son muy fáciles de implementar. La siguiente es la lista de opciones que se puede utilizar (el ejemplo está hecho con slide, pero se puede reemplazar por fade y funciona exactamente igual):</p>
<pre>$('div_animable').slide('in');
$('div_animable').slide('out');
$('div_animable').slide('show');
$('div_animable').slide('hide');
$('div_animable').slide('toggle');</pre>
<p>Al utilizar este tipo de efectos, se genera una animación con sus propiedades por defecto. Para modificar el comportamiento de cada una de ellas, es necesario primero definir la siguiente línea:</p>
<pre>var miEfecto = new Fx.Slide('div_animable', {
duration: 500,
transition: Fx.Transitions.Back.easeOut
});
miEfecto.slideOut();</pre>
<p>En este caso, primero se define un nuevo efecto y se almacena en una variable (<em>miEfecto</em>). Para definir este nuevo efecto, es necesario definir el tipo de efecto (<em>Fx.Slide</em>); al efecto definido se le deben pasar dos parámetros (separados por coma): el DIV que será animado a través de este efecto, y las propiedades que tendrá esta animación (también separadas por coma y encerradas entre llaves <em>{propiedad1, propiedad2, etc}</em>).</p>
<p>La línea siguiente ejecuta la función <em>slideOut()</em> a partir del efecto que generamos anteriormente. Esta puede ser ejecutada en la línea siguiente o seguida de <em>Fx.Slide()</em>, separada por un punto (ver siguiente ejemplo).</p>
<p>Las propiedades, que van dentro de los corchetes son opcionales, es decir que se pueden omitir. Una versión más simple de esto, sería algo así (sin definir propiedades):</p>
<pre>var miEfecto = new Fx.Slide('div_animable').slideOut();</pre>
<p>Es un poco más engorroso hacerlo de esta manera, pero a veces es necesario que podamos modificar los ajustes por defecto.</p>
<p>Ahora: ¿cómo hacer una secuencia de animaciones?. ¡Fácil!&#8230;claro…fácil si alguien te lo explica. Lo que se debe hacer es utilizar la función <em>chain()</em>.</p>
<p>La función <em>chain()</em> se aplica seguida de algún efecto, y dentro de ella se debe definir el nombre de una función que queramos ejecutar, o escribir <em>function(){ }</em> y escribir dentro de las llaves lo que queramos que pase.</p>
<pre>var miEfecto = new Fx.Slide('div_animable', {
duration: 500,
transition: Fx.Transitions.Back.easeOut
}).slideOut().chain(function(){
    alert("hola");
});</pre>
<p>En caso de querer hacer varios efectos del mismo tipo, se pueden simplemente poner uno detrás de otro, después de haber definido <em>Fx.Slide</em>.</p>
<pre>var miEfecto = new Fx.Slide('div_animable').slideOut().slideIn().slideOut();</pre>
<blockquote><p>La función <em>chain()</em> no puede ser aplicada directamente sobre <em>fade()</em> o <em>slide()</em>, es decir, que no puedes hacer esto:</p>
<pre>$('div_animable').fade('out').chain(function(){
 alert("hola");
 });</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sebastianbarria.com/javascript/tutorial-de-mootools-animaciones-simples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

