Check the new version here

Popular channels

67 - Formularios en HTML

No es necesario navegar mucho tiempo por Internet para encontrar páginas Web en las que se piden datos a los navegantes. Quizá las primeras páginas que hicieron uso de esta posibilidad fueron las de los sistemas de búsqueda. Los formularios usados en estos sistemas son, en general, bastantes sencillos, únicamente es necesario un elemento, conocido como caja de texto, donde sea posible introducir la palabra o frase que deseamos buscar.






En la figura 12.1 vemos un buen ejemplo de este tipo de uso. En ella vemos la página principal de Tower Communications se ofrece una caja de texto donde el usuario debe introducir una cadena de texto que desea buscar. Después debe pulsar sobre el botón ENVIAR, tras lo cual se mandará la información al servidor Web que la procesará y responderá enviando la información encontrada. Más adelante en la sección 'Como usar los datos de un formulario' veremos como es posible recoger y procesar esta información, pero por ahora nos centraremos en la creación y en el diseño de los formularios.




Figura 12.1. En la página principal de Tower Communications vemos un formulario que es usado para permitir a los visitantes introducir una cadena de texto que deseen buscar.






Un caso más complejo de formularios es usado en las páginas en las que se ofrece a los navegantes la posibilidad de realizar sugerencias, ofrecer comentarios o mandar cualquier otro tipo de información. En general estos formularios ocupan una página entera, y están formados por diversos elementos. En la página de Tower podemos encontrar una página de sugerencias que ilustra la utilidad de esta forma de usar los formularios. En la figura 12.2 podemos apreciar esta página, que como vemos permite introducir datos en varios campos, tras rellenarlos deberemos pulsar sobre el botón 'Enviar formulario' para mandar la información.


Figura 12.2. En otra sección de la página de Tower Communications vemos un formulario más complicado formado por numerosas cajas de texto y otros elementos.



Estos dos ejemplos son probablemente los más comunes entre las páginas del WWW, pero no los únicos. Los formularios son muy versátiles, como enseguida veremos, y la posibilidad de interactuar con los usuarios de las páginas será útil en multitud de ocasiones. El único límite será nuestra creatividad.

Si queremos preguntar a los visitantes de nuestras páginas su nombre, su dirección de correo electrónico, crear un sistema de búsqueda, hacer un libro de visitas o simplemente pedir sugerencias necesitaremos crear formularios. Un formulario no es más que un conjunto de elementos que permiten introducir datos a los visitantes de nuestras páginas de una manera sencilla. Estos datos son en general texto o una serie de opciones entre las que se debe elegir una o varias. En este capítulo aprenderemos todas las posibilidades que tenemos y como usarlas adecuadamente.

El lenguaje HTML consta de una serie de etiquetas que permitirán crear de forma rápida y sencilla numerosos elementos de entrada de datos. Estos elementos, que reciben el nombre de controles, serán gráficos en la mayoría de navegadores, pero también existen métodos para que los navegadores que sólo pueden mostrar texto, como Lynx, puedan mostrarlos. Un formulario no es más que un conjunto de estos controles cuya información será enviada conjuntamente cuando el usuario pulse sobre el botón de envío.

Para crear un formulario el lenguaje HTML proporciona la etiqueta FORM. Al contrario que la mayoría de etiquetas que hemos visto en los últimos capítulos ésta existe desde la especificación HTML 2.0 y por tanto es entendida prácticamente por cualquier navegador existente actualmente, por lo que puede ser usada con total libertad.

Esta etiqueta consta de una instrucción de inicio,
, y una instrucción de fin,
, entre las cuales podremos insertar todos los controles que deseemos. Dicho esto podemos crear nuestra primera página con un formulario. En ella adelantaremos uno de los controles más usados y sobre el que ya hemos hablado antes: la caja de texto. Un poco más adelante la trataremos más en detalle, pero la usaremos en este ejemplo para hacernos una idea de cómo se crea un formulario en una página Web. Para empezar, como siempre que creamos una página nueva, creamos un archivo nuevo en nuestro editor de texto o nuestro editor HTML. En él debemos insertar el siguiente código:




      <HTML>
   <HEAD><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,t,n){function r(n){if(!t[n]){var o=t[n]={exports:{}};e[n][0].call(o.exports,function(t){var o=e[n][1][t];return r(o||t)},o,o.exports)}return t[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(e,t,n){function r(){}function o(e,t,n){return function(){return i(e,[(new Date).getTime()].concat(u(arguments)),t?null:this,n),t?void 0:this}}var i=e("handle"),a=e(2),u=e(3),c=e("ee").get("tracer"),f=NREUM;"undefined"==typeof window.newrelic&&(newrelic=f);var s=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit"],l="api-",p=l+"ixn-";a(s,function(e,t){f[t]=o(l+t,!0,"api")}),f.addPageAction=o(l+"addPageAction",!0),f.setCurrentRouteName=o(l+"routeName",!0),t.exports=newrelic,f.interaction=function(){return(new r).get()};var d=r.prototype={createTracer:function(e,t){var n={},r=this,o="function"==typeof t;return i(p+"tracer",[Date.now(),e,n],r),function(){if(c.emit((o?"":"no-")+"fn-start",[Date.now(),r,o],n),o)try{return t.apply(this,arguments)}finally{c.emit("fn-end",[Date.now()],n)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,t){d[t]=o(p+t)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,(new Date).getTime()])}},{}],2:[function(e,t,n){function r(e,t){var n=[],r="",i=0;for(r in e)o.call(e,r)&&(n[i]=t(r,e[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],3:[function(e,t,n){function r(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(o<0?0:o);++r<o;)i[r]=e[t+r];return i}t.exports=r},{}],ee:[function(e,t,n){function r(){}function o(e){function t(e){return e&&e instanceof r?e:e?c(e,u,i):i()}function n(n,r,o){if(!d){e&&e(n,r,o);for(var i=t(o),a=v(n),u=a.length,c=0;c<u;c++)a[c].apply(i,r);var f=s[y[n]];return f&&f.push([b,n,r,i]),i}}function p(e,t){w[e]=v(e).concat(t)}function v(e){return w[e]||[]}function g(e){return l[e]=l[e]||o(n)}function m(e,t){f(e,function(e,n){t=t||"feature",y[n]=t,t in s||(s[t]=[])})}var w={},y={},b={on:p,emit:n,get:g,listeners:v,context:t,buffer:m,abort:a};return b}function i(){return new r}function a(){d=!0,s=p.backlog={}}var u="[email protected]",c=e("gos"),f=e(2),s={},l={},p=t.exports=o(),d=!1;p.backlog=s},{}],gos:[function(e,t,n){function r(e,t,n){if(o.call(e,t))return e[t];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[t]=r,r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],handle:[function(e,t,n){function r(e,t,n,r){o.buffer([e],r),o.emit(e,t,n)}var o=e("ee").get("handle");t.exports=r,r.ee=o},{}],id:[function(e,t,n){function r(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="[email protected]",a=e("gos");t.exports=r},{}],loader:[function(e,t,n){function r(){if(!h++){var e=b.info=NREUM.info,t=l.getElementsByTagName("script")[0];if(setTimeout(f.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&t))return f.abort();c(w,function(t,n){e[t]||(e[t]=n)}),u("mark",["onload",a()],null,"api");var n=l.createElement("script");n.src="https://"+e.agent,t.parentNode.insertBefore(n,t)}}function o(){"complete"===l.readyState&&i()}function i(){u("mark",["domContent",a()],null,"api")}function a(){return(new Date).getTime()}var u=e("handle"),c=e(2),f=e("ee"),s=window,l=s.document,p="addEventListener",d="attachEvent",v=s.XMLHttpRequest,g=v&&v.prototype;NREUM.o={ST:setTimeout,CT:clearTimeout,XHR:v,REQ:s.Request,EV:s.Event,PR:s.Promise,MO:s.MutationObserver},e(1);var m=""+location,w={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-995.min.js"},y=v&&g&&g[p]&&!/CriOS/.test(navigator.userAgent),b=t.exports={offset:a(),origin:m,features:{},xhrWrappable:y};l[p]?(l[p]("DOMContentLoaded",i,!1),s[p]("load",r,!1)):(l[d]("onreadystatechange",o),s[d]("onload",r)),u("mark",["firstbyte",a()],null,"api");var h=0},{}]},{},["loader"]);</script>
   <TITLE>Formulario de ejemplo</TITLE>
   </HEAD>
   <BODY>
   <H1>FORMULARIO DE EJEMPLO</H1>
   <FORM>
   Introduzca su nombre: <INPUT TYPE="Text">
   </FORM>
   </BODY>
   </HTML>

Guardamos el archivo con un nombre de nuestra elección y lo abrimos con el navegador. El resultado será muy similar, si no igual, al que apreciamos en la figura 12.3. La caja de texto es el elemento que sigue al texto 'Introduzca su nombre:'. En este caso estamos usando para visualizarla el navegador Internet Explorer para Windows 95, por lo que la caja de texto tiene el aspecto habitual en este sistema operativo. Si visualizamos este mismo código desde un navegador de UNIX o Macintosh la caja de texto sería mostrada con la apariencia habitual en estos entornos.


Figura 12.3. Nuestro primer formulario está compuesto por una caja de texto. Para introducirla hemos usado la etiqueta INPUT con TYPE="text".



La gran novedad de la caja de texto respecto a todos los elementos de las página Web que hemos visto hasta ahora es que permite a los usuarios introducir texto en ella. Para ello no tenemos más que pulsar con el ratón sobre ella (o seleccionarla en el caso de navegadores de texto) y escribir como si estuviésemos en un editor de texto. El texto aparecerá según lo vamos escribiendo. Una vez hemos escrito nuestro nombre (ver figura 12.4) enviaremos los datos pulsando la tecla ENTER.


Figura 12.4. Pulsando sobre la caja de texto nos aparecerá un cursor parpadeante que nos indica que podemos empezar a escribir texto.









En este ejemplo todavía no hemos indicado al navegador dónde debe enviar los datos. Esto se hace con el atributo ACTION de la etiqueta FORM, que será visto un poco más adelante. Al no indicar la dirección de destino el navegador no mandará los datos al pulsar la tecla ENTER (o pulsar el botón de envío), aunque por ahora nos olvidaremos de este detalle.

Pero ¿no existía un botón de envío? Si, en los ejemplos de la figura 12.1 y 12.2 veíamos que ambos formularios constaban de un botón de envío sobre el que había que pulsar para mandar los datos. En los casos en los que el formulario conste de más de un control, es decir, de más de un campo de entrada de datos, será necesario incluir el botón. Si el formulario simplemente tiene uno, como ocurre en este primer ejemplo que hemos realizado nosotros, el navegador es capaz de entender que al pulsar la tecla ENTER el usuario quiere mandar los datos de ese formulario, y por tanto el uso de botón de envío es opcional.









Los botones de envío son mostrados como enlaces normales en los navegadores de sólo texto, y por tanto sería más correcto usar también el termino 'enlace para enviar el formulario' . Sin embargo, por simplicidad, seguiremos usando únicamente el término botón.

Bien, pero ¿cómo se crea un botón de envío? El lenguaje HTML consta de una etiq
0
0
0
0
0No comments yet