<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Hist%C3%B2ria_d%27un_formulari</id>
	<title>Història d'un formulari - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Hist%C3%B2ria_d%27un_formulari"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Hist%C3%B2ria_d%27un_formulari&amp;action=history"/>
	<updated>2026-08-30T08:02:57Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Hist%C3%B2ria_d%27un_formulari&amp;diff=1282&amp;oldid=prev</id>
		<title>Joan a 09:46, 16 gen 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Hist%C3%B2ria_d%27un_formulari&amp;diff=1282&amp;oldid=prev"/>
		<updated>2009-01-16T09:46:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(aquest apunt està extret de l'extint bloc de Socrathos, del novembre de 2007)&lt;br /&gt;
&lt;br /&gt;
Bé, ja sóc un Form Master, i crec que puc donar una lliçó magistral sobre formularis.&lt;br /&gt;
&lt;br /&gt;
Primer de tot enumero totes les tecnologies que giren al voltant dels formularis, tal com crec que s'han de fer a la Web2.0: CSS, Javascript, AJAX. Total independència del disseny (CSS), el contingut (el formulari pròpiament) i el comportament del formulari (els events fets amb Javascript), i un llenguatge de script (ASP, PHP) per processar el formulari.&lt;br /&gt;
&lt;br /&gt;
'''Primer''' de tot, amb CSS s'ha de buscar un disseny atractiu, que fàcilment puguis modificar la longitud dels label i de les caixes de text i els combo. Que el formulari s'autoexpliqui (per ex, labels amb negreta per als camps obligatoris, text sombrejat allà on funcionarà el botó de cerca,...). Vaja, en definitiva, currar-se un CSS&lt;br /&gt;
&lt;br /&gt;
'''Segon'''. Els events no estan definits dins un formulari, sino en un fitxer Javascript extern. De manera que independitzem el disseny del formulari del seu comportament.&lt;br /&gt;
&lt;br /&gt;
Tots aquests són els events associats al formulari d'usuaris:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nou_event2(document.forms[0].foto, &amp;quot;change&amp;quot;,File1ToFile2,'arxiu2','arxiu');&lt;br /&gt;
nou_event1(document.forms[0].nom, &amp;quot;change&amp;quot;,checkmaj,document.forms[0].nom);&lt;br /&gt;
nou_event1(document.forms[0].cognoms, &amp;quot;change&amp;quot;,checkmaj,document.forms[0].cognoms);&lt;br /&gt;
nou_event1(document.forms[0].extensio, &amp;quot;change&amp;quot;,EsNumero,document.forms[0].extensio);&lt;br /&gt;
nou_event1(document.forms[0].extensio, &amp;quot;keyup&amp;quot;,EsNumero,document.forms[0].extensio);&lt;br /&gt;
nou_event2(document.forms[0].nom, &amp;quot;keydown&amp;quot;,textCounter,document.forms[0].nom,50);&lt;br /&gt;
nou_event2(document.forms[0].cognoms, &amp;quot;keydown&amp;quot;,textCounter,document.forms[0].cognoms,50);&lt;br /&gt;
nou_event2(document.forms[0].login, &amp;quot;keydown&amp;quot;,textCounter,document.forms[0].login,20);&lt;br /&gt;
nou_event2(document.forms[0].pwd1, &amp;quot;keydown&amp;quot;,textCounter,document.forms[0].pwd1,20);&lt;br /&gt;
nou_event2(document.forms[0].mail, &amp;quot;keydown&amp;quot;,textCounter,document.forms[0].mail,50);&lt;br /&gt;
nou_event1(document.forms[0].data_naix, &amp;quot;change&amp;quot;,EsDataDDMMYYYY,document.forms[0].data_naix);&lt;br /&gt;
nou_event1(document.forms[0].foto2, &amp;quot;keyup&amp;quot;,NoToquis,document.forms[0].foto2);&lt;br /&gt;
nou_event2(document.forms[0].mail, &amp;quot;change&amp;quot;,EsMail,document.forms[0].mail);&lt;br /&gt;
nou_event3(document.getElementById(&amp;quot;infopng&amp;quot;), &amp;quot;mouseover&amp;quot;,displayInfoFor,'infopng','info',250);&lt;br /&gt;
nou_event2(document.getElementById(&amp;quot;infopng&amp;quot;), &amp;quot;mouseout&amp;quot;,hideInfoFor,'infopng','info');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i la funció que cridem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function nou_event2(element, event, funcio, param1,param2) {&lt;br /&gt;
if (element.addEventListener) {&lt;br /&gt;
element.addEventListener(event, function(){funcio(param1,param2)}, false);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
element.attachEvent(&amp;quot;on&amp;quot;+event, function(){funcio(param1,param2)});&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elegant, no?&lt;br /&gt;
&lt;br /&gt;
'''Tercer'''. Biblioteca de funcions útils per al control de formularis. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function textCounter(element,maxlimit){&lt;br /&gt;
if (element.value.length &amp;gt; maxlimit) // if too long...trim it!&lt;br /&gt;
element.value = element.value.substring(0, maxlimit);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
d'aquesta manera puc eliminar la propietat size en els formularis. Amb aquestes funcions i els events associats faig una primera criba d'errors o de regles que imposo sobre els formularis: no escriure en majúscules, que el nif sigui correcte, que el mail sigui correcte, que les dates, telèfons,CP,... tinguin el format correcte,...&lt;br /&gt;
&lt;br /&gt;
'''Quart'''.&lt;br /&gt;
Segon control d'errors, amb Javascript. El formulari, quan es processa, s'envia a una funció de javascript. Aquí puc controlar que els camps obligatoris no estiguin buits, que els passwords coincideixin, i altres regles del joc que es poden definir.&lt;br /&gt;
&lt;br /&gt;
Me'n descuidava. Tot això del Javascript ve perquè deleguem en el navegador client el control de tota aquesta funcionalitat, i així ens evitem enviar al servidor tota una sèrie de dades que segurament encara no són vàlides per a ser processades.&lt;br /&gt;
Per tant, la feina, per al client!! (qui avui en dia no té una maquinorra de 1 o 2 Gb de RAM), i el servidor web, com menys el molestis, millor.&lt;br /&gt;
&lt;br /&gt;
'''Cinquè''': AJAX (paraula màgica)&lt;br /&gt;
&lt;br /&gt;
Un cop s'executa el Javascript, faig una crida asincrona a un fitxer de script (ASP, PHP) que és el que processarà les dades (les ficarà a la base de dades o el que sigui...). Mentrestant, la pàgina em mostra la típica icona de 'processant...', i aquí no es mou res! totes les capes estan al seu lloc.&lt;br /&gt;
Per tant, importantíssim, només envio al servidor les dades que s'han de processar. Tota la resta: html, capçalera, menú desplegable, capes diverses, està ''quieto i parao''. Com ha de ser: s'ha acabat enviar al servidor tota la pàgina web completa.&lt;br /&gt;
&lt;br /&gt;
Bé, ens hem quedat en el moment en què s'estan processant les dades. Això pot trigar des d'unes mil.lèssimes fins a uns minuts, depenent de la feina que estem fent amb les dades.&lt;br /&gt;
&lt;br /&gt;
Quan acaba la cosa? S'ha de mirar la propietat ''readyState'' de l'objecte ''xmlHttp'', objecte que representa la crida asíncrona.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (xmlHttp.readyState==4) {&lt;br /&gt;
oDiv.innerHTML=xmlHttp.responseText;&lt;br /&gt;
if (vfuncio==&amp;quot;nou_accio&amp;quot; vfuncio==&amp;quot;esborrar_accio&amp;quot;) {&lt;br /&gt;
document.getElementById(&amp;quot;contingut2&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
document.getElementById(vcapa).innerHTML='loading.gif';&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
aquí veiem com quan es processa el formulari se'ns mostra la icona ajax-loader.gif, i quan ha acabat la feina el resultat ''xmlHttp.responseText'' es pinta sobre la capa en qüestió, en aquest cas ''contingut2''.&lt;br /&gt;
&lt;br /&gt;
Interessant, no?&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>