<?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>Facilitant la web &#187; events</title>
	<atom:link href="http://blog.facilitant.net/tag/events/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.facilitant.net</link>
	<description>Recursos, consells i reflexions sobre el món de la web</description>
	<lastBuildDate>Tue, 02 Mar 2010 11:10:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Protegir pàgines amb l&#8217;event onbeforeunload</title>
		<link>http://blog.facilitant.net/2009/09/09/protegir-pagines-amb-levent-onbeforeunload/</link>
		<comments>http://blog.facilitant.net/2009/09/09/protegir-pagines-amb-levent-onbeforeunload/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 14:30:43 +0000</pubDate>
		<dc:creator>Ramon Vilar Gavaldà</dc:creator>
				<category><![CDATA[Desenvolupament]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[usabilitat]]></category>

		<guid isPermaLink="false">http://blog.facilitant.net/?p=173</guid>
		<description><![CDATA[No us ha passat mai que mentre esteu acabant d&#8217;omplir un formulari, sense adonar-vos, feu clic allà on no toca i perdeu tot el que heu introduït? Doncs bé, hi ha una senzilla manera per evitar al màxim aquests errors: l&#8217;event onbeforeunload.
Cap allà als mitjans dels noranta, Internet Explorer 4.0 introduí aquest event no estàndard, [...]]]></description>
			<content:encoded><![CDATA[<p>No us ha passat mai que mentre esteu acabant d&#8217;omplir un formulari, sense adonar-vos, feu clic allà on no toca i perdeu tot el que heu introduït? Doncs bé, hi ha una senzilla manera per evitar al màxim aquests errors: l&#8217;event <code class="javascript">onbeforeunload</code>.</p>
<p>Cap allà als mitjans dels noranta, Internet Explorer 4.0 introduí aquest event no estàndard, però a diferència d&#8217;altres ocasions, aquest cop feu una cosa útil i els navegadors amb motor Gecko ho acabaren introduint a la versió 1.7 de Mozilla (Firefox 1.0).</p>
<p>Aquest event, tal i com resa el seu nom, es dispara just <strong>abans</strong> de l&#8217;event <code class="javascript">onunload</code>, és a dir, abans que es descarregui el contingut actual de la pàgina, i per tant, ens permet executar algun tipus d&#8217;acció en aquest moment.</p>
<p>A diferència dels altres events, aquest funciona força diferent: per tal de mostrar un missatge a l&#8217;usuari abans de descarregar la pàgina, el que cal fer és retornar una cadena amb el missatge que es vulgui mostrar. Un exemple podria ser:</p>
<pre><code class="javascript">
window.onbeforeunload = function(e) {
  return "No heu enviat el formulari. Si tanqueu la pàgina perdreu tots els canvis fets fins ara.";
}
</code></pre>
<p>Així, en cas d&#8217;abandonar la pàgina, se&#8217;ns mostraria un quadre amb el missatge:</p>
<blockquote><p>Esteu segur que voleu sortir d’aquesta pàgina?</p>
<p><em>No heu enviat el formulari. Si tanqueu la pàgina perdreu tots els canvis fets fins ara.</em></p>
<p>Premeu D’acord per a continuar, o cancel·la per a romandre a la pàgina actual</p></blockquote>
<p>Les frases que hi ha just abans i després de les nostres les posa el navegador (en aquest cas Firefox) i no es poden eliminar, substituir ni evitar de cap tipus de les maneres.</p>
<p>Val a dir que en cas que el navegador no tingui implementat aquest event, aquests simplement l&#8217;ignoraran i no mostraran pas el missatge a l&#8217;usuari.</p>
<h3>Pàgines protegides</h3>
<p>Recapitulem. La raó principal d&#8217;aquest article és que fa poc a la feina em varen demanar que implementés una funcionalitat per a protegir pàgines: volien poder mostrar un missatge quan un usuari intentés abandonar la pàgina enmig d&#8217;un formulari dins d&#8217;un procés amb un cert flux o bé intentés abandonar una pàgina, la construcció de la qual fos molt costosa. Un exemple ideal per a treure l&#8217;event <code class="javascript">onbeforeunload</code> de la nostra cartera de recursos. Anem a construir-ho.</p>
<p>Per tal de poder marcar si una pàgina la tractem com a protegida o no, és a dir, si registrem l&#8217;event <code class="javascript">onbeforeunload</code> per mostrar un missatge a l&#8217;usuari en cas d&#8217;abandonar la pàgina, afegirem la classe <code>protected</code> a l&#8217;element <code class="html">/body</code> de la pàgina:</p>
<pre><code class="html">&lt;body class="protected"&gt;</code></pre>
<p>Així, si usem jQuery, podem afegir les següents línies de codi per a tenir-ho fet:</p>
<pre><code class="javascript">$('body.protected').each(function () {
  window.onbeforeunload = function(e){
    return "Si abandones, ho perdràs tot per sempre!";
  };
});
</code></pre>
<p>Però tenim un petit inconvenient: si fem clic en un enllaç o si enviem el formulari fent clic a un botó, se&#8217;ns mostrarà el missatge, cosa que volem evitar. Això es pot resoldre inhabilitant l&#8217;event en cas de fer clic a certs elements:</p>
<pre><code class="javascript">$('body.protected p.botons input, body.protected a.sense-onbeforeunload', context).click(function () {
  window.onbeforeunload = null;
});</code></pre>
<p>I així de fàcil obtenim el que busquem. Fàcil, oi? I segur que a més d&#8217;un li sembla útil, i fins i tot, més que necessari en alguna situació quotidiana.</p>
<h3>Recursos</h3>
<ul>
<li><a lang="en" xml:lang="en" hreflang="en" href="http://msdn.microsoft.com/en-us/library/ms536907%28VS.85%29.aspx">Onbeforeunload event. Internet Explorer Developer Center</a></li>
<li><a lang="en" xml:lang="en" hreflang="en" href="https://developer.mozilla.org/en/DOM/window.onbeforeunload">Window.onbeforeunload. Mozilla Developer Center</a></li>
<li><a lang="es" xml:lang="es" hreflang="es" href="http://blog.scriptia.net/articulos/2007/01/onbeforeunload.html">onbeforeunload: tiende una mano al usuario</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.facilitant.net/2009/09/09/protegir-pagines-amb-levent-onbeforeunload/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
