<?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>Sentido Web &#187; formularios</title>
	<atom:link href="http://sentidoweb.com/tag/formularios/feed" rel="self" type="application/rss+xml" />
	<link>http://sentidoweb.com</link>
	<description>Desarrollo web, HTML, CSS, Javascript, PHP, MySQL</description>
	<lastBuildDate>Tue, 10 Apr 2012 01:02:09 +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>Formularios CSS</title>
		<link>http://sentidoweb.com/2006/11/13/formularios-css.php</link>
		<comments>http://sentidoweb.com/2006/11/13/formularios-css.php#comments</comments>
		<pubDate>Mon, 13 Nov 2006 16:30:00 +0000</pubDate>
		<dc:creator>displaynone</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[css formularios forms]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[formularios]]></category>

		<guid isPermaLink="false">http://sentidoweb.com/2006/11/13/formularios-css.php</guid>
		<description><![CDATA[Algo que parece de lo más sencillo a veces nos puede llevar más tiempo del que pensamos, el desarrollo de formularios, si queremos que sea bueno, puede ser muy variado, por eso os pasamos una recopilación de distintas implementaciones de formularios que hemos encontrado. En ellos podrás encontrar desde el uso de fieldset y legend, [...]]]></description>
			<content:encoded><![CDATA[Algo que parece de lo más sencillo a veces nos puede llevar más tiempo del que pensamos, el desarrollo de formularios, si queremos que sea bueno, puede ser muy variado, por eso os pasamos una recopilación de distintas implementaciones de formularios que hemos encontrado.
En ellos podrás encontrar desde el uso de <em>fieldset</em> y <em>legend</em>, maquetación sin el uso de tablas, división en grupos de datos, formularios dinámicos dependientes de selección de opciones previas y muchos otros más.
<a href="http://www.smashingmagazine.com/2006/11/11/css-based-forms-modern-solutions/">CSS-Based Forms: Modern Solutions</a>
Vía / <a href="http://www.dzone.com/rsslinks/cssbased_forms_modern_solutions.html">dzone</a>
]]></content:encoded>
			<wfw:commentRss>http://sentidoweb.com/2006/11/13/formularios-css.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laboratorio: shortcuts en formularios</title>
		<link>http://sentidoweb.com/2006/07/10/laboratorio-shortcuts-en-formularios.php</link>
		<comments>http://sentidoweb.com/2006/07/10/laboratorio-shortcuts-en-formularios.php#comments</comments>
		<pubDate>Tue, 11 Jul 2006 03:35:42 +0000</pubDate>
		<dc:creator>displaynone</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Laboratorio]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[shortcuts]]></category>
		<category><![CDATA[shortcuts formularios javascript]]></category>

		<guid isPermaLink="false">http://sentidoweb.com/2006/07/10/laboratorio-shortcuts-en-formularios.php</guid>
		<description><![CDATA[Algo a lo que suelo estar acostumbrado es a usar el teclado para realizar ciertas acciones (shortcuts), cuando estás 8 horas diarias delante de un ordenador, si no haces uso de los shortcuts, perderás mucho tiempo moviendo el ratón de un lado para otro. Antes el uso estaba más restringido a las aplicaciones de escritorio [...]]]></description>
			<content:encoded><![CDATA[<p>Algo a lo que suelo estar acostumbrado es a usar el teclado para realizar ciertas acciones (shortcuts), cuando estás 8 horas diarias delante de un ordenador, si no haces uso de los shortcuts, perderás mucho tiempo moviendo el ratón de un lado para otro.</p>
<p>Antes el uso estaba más restringido a las aplicaciones de escritorio (CTRL + S para guardar el documento, ALT + F4 para cerrar la ventana, &#8230;), pero ahora que cada vez se usa con más frecuencia aplicaciones web, se echan en falta estas facilidades. Aunque hay que decir que últimamente se ven con más frecuencia: TAB + INTRO para enviar un correo en GMail (claro que esta no se programa), CONTROL + S para guardar una entrada en Blogger, &#8230;</p>

<span id="more-358"></span>
<p><strong>El desarrollo para esta funcionalidad es bastante sencillo, se trata de capturar el evento del teclado en el elemento HTML que deseemos</strong>, en nuestro caso en un <em>textarea</em> para escribir entradas en un blog (por ejemplo).</p>
<p>Tampoco es tan sencillo como capturar el evento del teclado, hay que capturar realmente el evento de &#8220;apretar&#8221; una tecla (<em>onkeydown</em>), para evitar que se realice la acción por defecto cuando &#8220;soltamos&#8221; la tecla (<em>onkeyup</em>).</p>
<p>Otra dificultad a la que nos enfrentamos es la de evitar que cierto juego de teclas ejecuten la acción predeterminada por el navegador. Por ejemplo, en Firefox, si pulso CTRL + S me querrá guardar la página como un HTML en mi disco duro, cuando yo lo que quiero es enviar el formulario al servidor para guardarlo. Para evitar el comportamiento por defecto, hay que &#8220;anular&#8221; los eventos en el elemento <em>body</em>.</p>
<p>Los eventos yo prefiero manejarlos llamando dentro del evento en la etiqueta HTML, pasándole como parámetro el objeto <em>event</em>:</p>
<pre><code>&lt;textarea <strong>onkeydown="shortcut(event)"</strong> ... &gt;&lt;/textarea&gt;</code></pre>
<p>El objeto <em>event</em> solo existe en IE (para variar), en Firefox, se pasa el evento como primer parámetro de la función, por lo cual en firefox, al no existir <em>event</em>, se le pasa automáticamente el objeto evento (en este caso <a href="http://xulplanet.com/references/objref/KeyboardEvent.html">KeyboardEvent</a>), así nos ahorramos el trabajo de ir preguntando que tipo de navegador es y tener que buscar el objeto <em>event</em>. Una vez ya tenemos en nuestro poder el objeto evento, para acceder a la tecla pulsada, solo tenemos que recuperar el valor de <em>keyCode</em>, que nos dará un número que representa la tecla pulsada, para saber si está pulsada la tecla control o alt, solo tendremos que chequear el valor de <em>ctrlKey</em> y <em>altKey</em>. Para saber el valor de las teclas que queremos capturar, os recomiendo que useis un <em>alert</em> y vayáis apuntando los números que os salen cuando pulsáis las teclas.</p>
<p>Para cancelar el evento y que no siga con lo predeterminado, hay que usar el siguiente código, el cual sirve para IE y para Firefox, aunque creo que ninguno de los dos es estándar:</p>
<pre><code>evt.cancelBubble = true;
// Para Firefox
if (evt.stopPropagation) {
evt.preventDefault();
}</code></pre>
<p>En el ejemplo que os voy a pasar, he capturado CONTROL+S para guardar el documento y CONTROL+B para poner en negrita el texto seleccionado dentro del <em>textarea</em>. Para obtener el texto seleccionado, es necesario el siguiente código (incluyo el añadir la etiqueta que deseamos):</p>
<pre><code>if (obj.createTextRange) { // IE
var r = document.selection.createRange();
texto = r.text;
r.text = '&lt;'+etiqueta+'&gt;'+texto+'&lt;/'+etiqueta+'&gt;'
} else if (obj.setSelectionRange) { // Firefox
// Posicion inicial en el string del texto seleccionado
var ini = obj.selectionStart;
// Posicion final en el string del texto seleccionado
var fin = obj.selectionEnd;
// Obtengo el substring
obj.value = obj.value.substring(0, ini)+'&lt;'+etiqueta+'&gt;'+obj.value.substring(ini, fin)+'&lt;/'+etiqueta+'&gt;'+obj.value.substring(fin);
// Selecciono lo que estaba seleccionado anteriormente más las etiquetas
obj.selectionStart = fin+5+(etiqueta.length*2);
obj.selectionEnd = fin+5+(etiqueta.length*2);
}</code></pre>
<p>El código necesario para realizar los shortcuts sería el siguiente:</p>
<pre><code>&lt;script type="text/javascript"&gt;
// Controla la pulsación de teclas
function shortcut(evt) {
if (evt.keyCode == 83 &amp;&amp; evt.ctrlKey) { // CONTROL+S
// Simulacion de guardado
setTimeout('alert("GUARDADO")', 1000);
} else if (evt.keyCode == 66 &amp;&amp; evt.ctrlKey) { // CONTROL+B
modificaTextoSeleccionado(document.getElementById("caja-texto"), 'strong');
return false;
} else {
return true;
}
}
// Se cancela los eventos que se producen
function evitaEvento(evt) {
if (evt.ctrlKey) { // CONTROL+S
evt.cancelBubble = true;
// Para Firefox
if (evt.stopPropagation) {
evt.preventDefault();
}
}
}
// Obtiene el texto seleccionado y se encierra entre etiquetas
function modificaTextoSeleccionado(obj, etiqueta) {
var texto = "";
if (obj.createTextRange) {  // IE
var r = document.selection.createRange();
texto = r.text;
r.text = '&lt;'+etiqueta+'&gt;'+texto+'&lt;/'+etiqueta+'&gt;'
} else if (obj.setSelectionRange) {  // Firefox
// Posicion inicial en el string del texto seleccionado
var ini = obj.selectionStart;
// Posicion final en el string del texto seleccionado
var fin = obj.selectionEnd;
// Obtengo el substring
obj.value = obj.value.substring(0, ini)+'&lt;'+etiqueta+'&gt;'+obj.value.substring(ini, fin)+'&lt;/'+etiqueta+'&gt;'+obj.value.substring(fin);
// Selecciono lo que estaba seleccionado anteriormente más las etiquetas
obj.selectionStart = fin+5+(etiqueta.length*2);
obj.selectionEnd = fin+5+(etiqueta.length*2);
}
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onkeypress="evitaEvento(event)"&gt;
&lt;textarea onkeydown="shortcut(event)" id="caja-texto"&gt;
...
&lt;/textarea&gt;</code></pre>
<p><a href="http://sentidoweb.com/lab/shortcuts/js/shortcuts.html">Demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sentidoweb.com/2006/07/10/laboratorio-shortcuts-en-formularios.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Botones: Distintas formas de enviar un formulario</title>
		<link>http://sentidoweb.com/2006/04/17/botones-distintas-formas-de-enviar-un-formulario.php</link>
		<comments>http://sentidoweb.com/2006/04/17/botones-distintas-formas-de-enviar-un-formulario.php#comments</comments>
		<pubDate>Tue, 18 Apr 2006 00:00:00 +0000</pubDate>
		<dc:creator>displaynone</dc:creator>
				<category><![CDATA[Grafismo]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[botones imágenes]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[formularios submit botones imágenes]]></category>
		<category><![CDATA[submit]]></category>

		<guid isPermaLink="false">http://sentidoweb.com/2006/04/17/botones-distintas-formas-de-enviar-un-formulario.php</guid>
		<description><![CDATA[Existen distintas formas de enviar los datos de un formulario a la aplicación web que se encarga de procesar la información. Todos los métodos son igualmente válidos, y va según los gustos usar unos u otros. Los formularios dentro de HTML disponen de sus propios elementos para enviar los datos al formulario. El elemento en [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="input-image.gif" src="http://sentidoweb.com/img/2006/04/input-image.gif" class="right" width="96" height="70" /> Existen distintas formas de enviar los datos de un formulario a la aplicación web que se encarga de procesar la información. Todos los métodos son igualmente válidos, y va según los gustos usar unos u otros.</p>
<p>Los <a href="http://www.w3.org/TR/REC-html40/interact/forms.html">formularios</a> dentro de HTML disponen de sus propios elementos para enviar los datos al formulario. El elemento en cuestión es el <a href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4.1">input</a>, el cual según sea su atributo <a href="http://www.w3.org/TR/REC-html40/interact/forms.html#adef-type-INPUT">type</a>, podemos enviar los datos directamente con el elemento <a href="http://www.w3.org/TR/REC-html40/interact/forms.html#submit-button">submit</a> o podemos reiniciar los valores de los elementos del formulario con el botón <a href="http://www.w3.org/TR/REC-html40/interact/forms.html#reset-button">reset</a>.</p>
<pre><code>&lt;input type="submit" value="Enviar" /&gt;
&lt;input type="submit" value="Reiniciar" /&gt;</code></pre>
<p>En los formularios de <strong>Sentido Web</strong> usamos <strong>los elementos input con el <a href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4.1">type=&#8221;imagen&#8221;</a></strong>. Este elemento usa una imagen como elemento submit, devolviendo la posición x e y de la imagen donde se ha producido el evento:</p>
<pre><code>&lt;input name="preview" type="image" align="top" value="Revisar" src="http://sentidoweb.com/i/bt/bt-revisar.gif" /&gt;
&lt;input name="post" type="image" align="top" value="Publicar" src="http://sentidoweb.com/i/bt/bt-publicar.gif" /&gt;</code></pre>
<p>Cuando se usa esta posibilidad, se enviarán dos parámetros al script usando el texto que hayamos usado en el atributo <em>name</em>, se le añade un <em>_x</em> para la coordenada x y un <em>_y</em> para la coordenada y, en el caso de Firefox también manda el parámetro sin sufijo. En el caso anterior, para saber cual de los dos se ha pulsado, se comprueba si hay parámetro <em>preview_x</em> o <em>preview_y</em> para el primer caso y <em>post_x</em> o <em>post_y</em> para el segundo caso.</p>
<p>Siguiendo con el elemento input, podemos usar el botón (<a href="http://www.w3.org/TR/REC-html40/interact/forms.html#push-button">type=&#8221;button&#8221;</a>), pero habrá que añadirle el evento <em>onclick</em> para que haga el <em>submit</em>.</p>
<pre><code>&lt;input type="button" value="Enviar" onclick="document.forms[0].submit()" /&gt;</code></pre>
<p>Otra forma distinta es mediante el uso de un enlace, en el href o en el onclick se deberá escribir el código Javascript necesario para el envío del formulario:</p>
<pre>&lt;a href="javascript:document.forms[0].submit()"&gt;Enviar&lt;/a&gt;</pre>
<p>Y por último, pero no por ello menos importante <img src='http://sentidoweb.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , mediante la pulsación de la tecla <em>intro</em> en una de las cajas del formulario. Esto lo realizan normalmente los navegadores cuando dentro de un formulario hay alguna forma estándar de hacer el submit, pero en el caso de que no queramos poner botón de submit, tendremos que ejecutar el siguiente código en el evento <em>onkeypress</em> de la caja:</p>
<pre><code>&lt;input name="nombre" onkeypress="if (event.keyCode == 13) document.forms[0].submit()"/&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://sentidoweb.com/2006/04/17/botones-distintas-formas-de-enviar-un-formulario.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

