
<?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>BitTrack &#187; jQuery</title>
	<atom:link href="http://www.bittrack.it/archives/category/web-developement/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bittrack.it</link>
	<description>BitTrack.it tratta di Informatica, Programmazione, Reti, Hack, Trucchi, Tutorial, Webdesign e simili.</description>
	<lastBuildDate>Tue, 27 Apr 2010 16:41:42 +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>Primi passi con jQuery – 3</title>
		<link>http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/</link>
		<comments>http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 07:00:58 +0000</pubDate>
		<dc:creator>Raspo</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[selettore]]></category>

		<guid isPermaLink="false">http://www.bittrack.it/?p=1187</guid>
		<description><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/11/primi-passi-con-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="primi-passi-con-jquery" /></div>Oggi, dopo una lunga assenza, continua la guida a jQuery con la terza parte, dove vedremo in quanti modi è possibile interagire con i form HTML tipo input, bottoni, checkbox, etc&#8230;

Prima di cominciare
Ricordati di caricare la libreria jQuery nella sezione &#60;head&#62; e di inserire i codici jQuery che vedremo tra poco, all&#8217;interno del canonico $(document).ready(function(){ [...]]]></description>
			<content:encoded><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/11/primi-passi-con-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="primi-passi-con-jquery" /></div><p>Oggi, dopo una lunga assenza, continua la guida a jQuery con la terza parte, dove vedremo in quanti modi è possibile interagire con i form HTML tipo<strong> input</strong>, <strong>bottoni</strong>, <strong>checkbox</strong>, etc&#8230;<br />
<span id="more-1187"></span></p>
<h2>Prima di cominciare</h2>
<p>Ricordati di caricare la libreria jQuery nella sezione <strong>&lt;head&gt;</strong> e di inserire i codici jQuery che vedremo tra poco, all&#8217;interno del canonico <em>$(document).ready(function(){ … });</em> come visto nella <a href="http://www.bittrack.it/archives/primi-passi-con-jquery-1/" target="_blank">prima lezione</a>.</p>
<h2>Ottenere il contenuto di un campo</h2>
<p>Prendiamo un campo input con id <em>esempio1</em>, vogliamo far sì che, cliccando sul pulsante con id <em>btn</em>1, il contenuto del campo venga letto e mostrato all&#8217;utente in una finestra di alert.</p>
<pre class="brush: xml;">
&lt;input id=&quot;esempio1&quot; type=&quot;text&quot; value=&quot;Questo è il contenuto di default&quot; /&gt;
&lt;button id=&quot;btn1&quot; type=&quot;button&quot;&gt;Cliccami&lt;/button&gt;
</pre>
<p>Il codice jQuery è:</p>
<pre class="brush: jscript;">$(&quot;#btn1&quot;).click(function(){
    var testo = $(&quot;#esempio1&quot;).val();
    alert(testo);
});</pre>
<p>Che tradotto a parole significa: quando fai click sull&#8217;elemento con id<em> btn1</em>, cerca l&#8217;elemento <em>esempio1</em>, estraine il valore e salvalo dentro una variabile <em>testo</em> creata sul momento; quindi, mostrami il contenuto della variabile in una finestra di alert.</p>
<input id="esempio1" class="inputTut" type="text" value="Questo è il contenuto di default" /> <button id="btn1" class="buttonTut">Cliccami</button></p>
<p>Da notare l&#8217;utilizzo della funzione <strong><a href="http://api.jquery.com/val/" target="_blank">.val()</a></strong> che scritta così, senza valori tra parentesi, restituisce il valore dell&#8217;elemento, quindi il contenuto dell&#8217;input in quel momento.</p>
<h2>Impostare il contenuto di un campo</h2>
<p>Se invece di usare <strong><a href="http://api.jquery.com/val/" target="_blank">.val()</a></strong> come abbiamo appena fatto, mettiamo una stringa all&#8217;interno delle parentesi, la funzione non restituirà più un valore, ma imposterà quello che abbiamo indicato tra parentesi.</p>
<pre class="brush: jscript;">$(&quot;#btn2&quot;).click(function(){
   $(&quot;#esempio2&quot;).val(&quot;&quot;);
});</pre>
<p>In questo caso, cliccando sul pulsante, il valore del campo viene azzerato, o meglio, viene impostato un valore nullo, che si scrive con due virgolette aperte e chiuse.</p>
<input id="esempio2" class="inputTut" type="text" value="Questo è il contenuto di default" /> <button id="btn2" class="buttonTut">Cancella</button></p>
<h2>Conteggio dei caratteri</h2>
<p>Per creare uno script per il conteggio dei caratteri abbiamo bisogno come al solito di un campo input di tipo text e di un area (per esempio uno span) dove inserire il numero dei caratteri.</p>
<pre class="brush: xml;">&lt;input id=&quot;esempio3&quot; type=&quot;text&quot; value=&quot;&quot; /&gt;
&lt;span id=&quot;contatore1&quot; &gt;0&lt;/span&gt;</pre>
<p>Ed ecco il codice jQuery:</p>
<pre class="brush: jscript;">$(&quot;#esempio3&quot;).keyup(function(){
    var num = $(this).val().length;
    $(&quot;#contatore1&quot;).html(num);
});</pre>
<p>La funzione<strong><a href="http://api.jquery.com/keyup/" target="_blank"> .keyup() </a></strong>esegue la funzione tra parentesi ogni volta che viene premuto e rilasciato un tasto.<br />
Tale funzione, crea al volo una variabile <strong>num</strong> dentro cui inserisce il numero dei caratteri fin&#8217;ora inseriti nel campo con id <em>esempio3</em> a cui faccio riferimento con <strong>$(this)</strong> perché è l&#8217;oggetto del <strong>keyup()</strong>.<br />
In particolare, per prendere il numero di caratteri, prima uso <strong>.val()</strong>, senza valori tra parentesi, che restituisce una stringa contenente il valore dell&#8217;<strong>input</strong>, successivamente uso <strong>.length</strong> che restituisce  il numero di caratteri della stringa.<br />
Quindi, se fin&#8217;ora ho scritto nell&#8217;input &#8220;prova&#8221;, la funzione <strong>.val() </strong>mi da appunto la stringa &#8220;prova&#8221; e <strong>.lenght</strong> mi da 5.<br />
Infine, scrivo il numero dei caratteri dentro lo span con id <em>contatore1</em> usando il comando <strong>.html()</strong>.</p>
<p>Il funzionamento di <strong><a href="http://api.jquery.com/html/">.html()</a></strong> è analogo a <strong><a href="http://api.jquery.com/val/">.val()</a></strong>, l&#8217;unica differenza sta nel fatto che la seconda viene usata per i campi<strong> input</strong>, le <strong>textarea</strong>, le <strong>select</strong> e i<strong> button</strong>, mentre la prima è valida per tutti gli altri tipi di tag html.</p>
<input id="esempio3" class="inputTut" type="text" /><span id="contatore1" class="count">0</span></p>
<h2 id="countDown">Conteggio dei caratteri rimanenti</h2>
<p>Per ottenere invece l&#8217;effetto countdown dei caratteri rimanenti in un campo <strong>input</strong>, abbiamo bisogno della stessa struttura HTML dell&#8217;esempio precedente con l&#8217;aggiunta dell&#8217;attributo <em>maxlength=&#8221;15&#8243;</em> all&#8217;input, dove 15 è il numero massimo di caratteri che vogliamo far inserire.</p>
<pre class="brush: xml;">&lt;input id=&quot;esempio4&quot; type=&quot;text&quot; value=&quot;&quot; maxlength=&quot;15&quot;/&gt;
&lt;span id=&quot;contatore2&quot; &gt;&lt;/span&gt;</pre>
<p>Codice jQuery:</p>
<pre class="brush: jscript;">var max = $(&quot;#esempio4&quot;).attr(&quot;maxlength&quot;);
$(&quot;#contatore2&quot;).html(max);

$(&quot;#esempio4&quot;).keyup(function(){
    var num = $(this).val().length;
    $(&quot;#contatore2&quot;).html(max-num);
});</pre>
<p>Prima di tutto creo una variabile globale<strong> max</strong> che corrisponde al contenuto dell&#8217;attributo <strong>maxlength</strong> dell&#8217;elemento con id <em>esempio4</em>, che in questo caso sarà 15.<br />
Adesso che so qual&#8217;è il numero massimo di caratteri desiderato, lo indico all&#8217;utente scrivendolo dentro allo span con id <em>contatore2</em>.</p>
<p>Adesso, sfruttando ancora una volta la funzione <strong>.keyup()</strong>, salvo dentro alla variabile <strong>num</strong> creata al volo il numero di caratteri fin&#8217;ora scritti nell&#8217;input, come visto nell&#8217;esempio precedente.</p>
<p>Quindi, scrivo dentro allo span con id <em>contatore2</em> il numero di caratteri ancora disponibili, calcolato come sottrazione del numero massimo con quello corrente.</p>
<input id="esempio4" class="inputTut" maxlength="15" type="text" /><span id="contatore2" class="count"> </span></p>
<h2>Ottenere il valore del radio button selezionato</h2>
<p>Adesso vediamo il caso in cui abbiamo una serie di<strong> input di tipo radio</strong> e al click su un qualche pulsante (tipo quello per l&#8217;<a href="http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/" target="_blank">invio di un email</a>) vogliamo sapere quale<strong> radio button</strong> è stato selezionato dall&#8217;utente.</p>
<p>Prima di tutto, come al solito, va definita la struttura HTML che stavolta dovrà contenere vari <strong>input di tipo radio</strong> e un altro elemento tipo un link (ma può essere qualsiasi cosa) da usare come pulsante per azionare lo script.</p>
<pre class="brush: xml;">&lt;form id=&quot;esempio5&quot;&gt;
  &lt;input type=&quot;radio&quot; name=&quot;radioTest&quot; value=&quot;jQuery&quot; checked=&quot;checked&quot; /&gt;jQuery
  &lt;input type=&quot;radio&quot; name=&quot;radioTest&quot; value=&quot;spacca&quot; /&gt;spacca
  &lt;input type=&quot;radio&quot; name=&quot;radioTest&quot; value=&quot;di&quot; /&gt;di
  &lt;input type=&quot;radio&quot; name=&quot;radioTest&quot; value=&quot;brutto&quot; /&gt;brutto
  &lt;button id=&quot;btn3&quot; type=&quot;button&quot;&gt;Quale ho selezionato?&lt;/button&gt;
  &lt;span id=&quot;result&quot;&gt;&lt;/span&gt;
&lt;/form&gt;</pre>
<p>Uno degli input dovrà avere l&#8217;attributo <strong>checked=&#8221;checked&#8221;</strong> che indica che è stato selezionato, perché è buona pratica indicare un valore predefinito quando si ha a che fare con i <strong>radio button</strong>.<br />
Notare che ho aggiunto anche uno <em>span</em> con id <em>result</em>, utile ai soli fini dell&#8217;esempio.<br />
Ecco il codice jQuery</p>
<pre class="brush: jscript;">$(&quot;#btn3&quot;).click(function(){
   var selezione = $(&quot;#esempio5 input:checked&quot;).val();
   $(&quot;#result&quot;).html(selezione);
});</pre>
<p>Prima di tutto individuo l&#8217;elemento da cliccare per avviare la funzione, in questo caso si tratta di un <strong>button</strong> con id<em> btn3</em>.<br />
Dopo che è stato cliccato, salvo dentro ad una variabile &#8220;<strong>selezione</strong>&#8221; il valore ( <strong>.val()</strong> ) dell&#8217;input selezionato ( <strong>input:checked</strong> ) contenuto dentro all&#8217;elemento che ha id <em>esempio5</em> ( <strong>#esempio5</strong> ).<br />
Fatto ciò, ho il contenuto del <strong>radio button</strong> scelto dentro alla variabile e posso decidere cosa farne; in questo esempio lo mostro all&#8217;utente scrivendolo dentro allo <strong>span</strong> con id <em>selezione</em>.</p>
<form id="esempio5">
<input class="radioInputTut" checked="checked" name="radioTest" type="radio" value="jQuery" />jQuery</p>
<input class="radioInputTut" name="radioTest" type="radio" value="spacca" />spacca</p>
<input class="radioInputTut" name="radioTest" type="radio" value="di" />di</p>
<input class="radioInputTut" name="radioTest" type="radio" value="brutto" />brutto<br />
<button id="btn3" class="buttonTut">Quale ho selezionato?</button><span id="result"> </span></form>
<h2>Controllare se una checkbox è stata selezionata</h2>
<p>Se nel nostro form abbiamo invece bisogno di controllare se una <strong>checkbox</strong> è stata selezionata o meno, possiamo fare come segue.<br />
Codice HTML:</p>
<pre class="brush: xml;">&lt;form id=&quot;esempio6&quot;&gt;
  &lt;input type=&quot;checkbox&quot; value=&quot;jQuery&quot; /&gt;Controllo sulla checkbox
  &lt;button id=&quot;btn4&quot; type=&quot;button&quot;&gt;La checkbox è stata selezionata?&lt;/button&gt;
  &lt;span id=&quot;result2&quot;&gt;&lt;/span&gt;
&lt;/form&gt;</pre>
<p>Codice jQuery:</p>
<pre class="brush: jscript;">$(&quot;#btn4&quot;).click(function(){
  if( $(&quot;#esempio6 input&quot;).is(&quot;:checked&quot;) ){
    //Cosa fare se è stato selezionato
   $(&quot;#result2&quot;).html(&quot;Certo, non lo vedi?&quot;);
  }else{
    //Altrimenti fai questo
   $(&quot;#result2&quot;).html(&quot;No&quot;);
  }</pre>
<p>Tradotto a parole: quando faccio click sull&#8217;elemento con id <em>btn4</em>, se l&#8217;<strong>input</strong> che si trova dentro all&#8217;elemento con id <em>#esempio6</em> possiede la pseudo-classe <strong>:checked</strong> (cioè è stato selezionato), cerca l&#8217;elemento con id <em>#result2</em> e scrivi al suo interno <em>&#8220;Certo, non lo vedi?&#8221;</em>; in caso contrario scrivi <em>&#8220;No&#8221;</em>.</p>
<form id="esempio6">
<input class="radioInputTut" type="checkbox" value="jQuery" />Controllo sulla checkbox<br />
<button id="btn4" class="buttonTut">La checkbox è stata selezionata?</button><span id="result2"> </span><br />
</form>
<p>Ovviamente quando andrai ad utilizzare questo metodo, avrai bisogno di ben altro rispetto che scrivere delle stringhe fini a se stesse dentro a uno span, io ti ho dato solo indicazione su come fare il controllo sulla <strong>checkbox</strong>.</p>
<p>Notare che per indicare la checkbox ho usato come selettore <code>$("#esempio6 input")</code> che però è un po&#8217; troppo generico e andrà a cercare ogni input dentro a <em>#esempio6</em>.<br />
Per essere sicuri che si tratti della<strong> checkbox </strong>potresti dare a questa un <strong>id</strong> o una<strong> classe</strong> specifica e selezionarla usando <code>$(".nomeclasse")</code> oppure <code>$("#nomeID")</code><br />
Altrimenti potresti anche usare uno dei codidetti &#8220;<strong><a href="http://css-tricks.com/attribute-selectors/" target="_blank">Attribute Selectors</a></strong>&#8221; del CSS. Scrivendo <code>$("#esempio6 input[type=checkbox]")</code> indicherai solo gli input di tipo <strong>checkbox </strong>dentro a <em>#esempio6</em>.</p>
<h2>Fine</h2>
<p>Anche per oggi la lezione su jQuery finisce qui. Spero di essere stato d&#8217;aiuto e se avrai qualche richiesta specifica, non esitare a lasciare un commento <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_cool.png' alt='8)' class='wp-smiley' /> .</p>


<p>Articoli correlati:<ol><li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-1/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 1'>Primi passi con jQuery &#8211; 1</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-2/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 2'>Primi passi con jQuery &#8211; 2</a></li>
<li><a href='http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/' rel='bookmark' title='Permanent Link: Creare un anteprima dinamica dei commenti'>Creare un anteprima dinamica dei commenti</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primi passi con jQuery &#8211; 2</title>
		<link>http://www.bittrack.it/archives/primi-passi-con-jquery-2/</link>
		<comments>http://www.bittrack.it/archives/primi-passi-con-jquery-2/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 20:25:01 +0000</pubDate>
		<dc:creator>Raspo</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[funzioni]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.bittrack.it/?p=901</guid>
		<description><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/11/primi-passi-con-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="primi-passi-con-jquery" /></div>Eccoci qua con una nuova lezione di Jquery.
L&#8217;altra volta abbiamo visto degli esempi molto semplici di funzioni jquery, che però ti dovrebbero aver già fatto intuire come sia la struttura di qualsiasi altro script.

Struttura di base
Ricapitolando, abbiamo visto che tutto il codice jquery deve stare all&#8217;interno di $(document).ready(function() { &#8230;  }); per funzionare.
Fatto questo, [...]]]></description>
			<content:encoded><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/11/primi-passi-con-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="primi-passi-con-jquery" /></div><p>Eccoci qua con una nuova lezione di <strong>Jquery</strong>.<br />
L&#8217;<a href="http://www.bittrack.it/archives/primi-passi-con-jquery-1/" target="_blank">altra volta</a> abbiamo visto degli esempi molto semplici di funzioni jquery, che però ti dovrebbero aver già fatto intuire come sia la struttura di qualsiasi altro script.<br />
<span id="more-901"></span></p>
<h2>Struttura di base</h2>
<p>Ricapitolando, abbiamo visto che tutto il codice jquery deve stare all&#8217;interno di <em>$(document).ready(function() {</em> &#8230;  <em>});</em> per funzionare.</p>
<p>Fatto questo, avremo sempre bisogno di un <strong>oggetto</strong> da cui partire, come ad esempio: <em>$(”#prova”)</em>. Nei casi analizzati, si trattava di un oggetto con un preciso <strong>ID</strong> o <strong>classe</strong>, ma non sempre sarà così e quindi ricorreremo a tutta una serie di <strong><a href="http://docs.jquery.com/Selectors" target="_blank">selettori</a></strong>, che ho intensione di vedere più avanti.</p>
<p>Una volta individuato l&#8217;oggetto, abbiamo bisogno di un <strong><a href="http://docs.jquery.com/Events" target="_blank">evento</a></strong>, per proseguire nell&#8217;esecuzione della funzione. Anche in questo caso, abbiamo visto solo l&#8217;evento <strong><a href="http://docs.jquery.com/Events/click#fn" target="_blank">.click()</a></strong>, che fa partire una certa funzione nel momento in cui clicchiamo sull&#8217;oggetto indicato, ma ce ne saranno altri da prendere in considerazione.</p>
<p>Indicato l&#8217;evento scatenante, possiamo passare alla descrizione della funzione vera e propria, quindi ci servirà nuovamente un <strong>oggetto</strong> su cui lavorare e far partire le animazioni e gli effetti vari che la libreria jQuery ci mette a disposizione. Fin&#8217;ora hai visto solo il<strong> .fadeIn()</strong>.<br />
Esempio:</p>
<pre class="brush: jscript;">
  $(&quot;#prova&quot;).click(function() {
     $(&quot;.hide&quot;).fadeIn();
     return false;
  });
</pre>
<p>Questa che ho cercato di tracciare è la struttura che seguiremo nel 90% dei casi:</p>
<p>selettore + evento &#8211;&gt; selettore + effetto</p>
<p>Ora non resta altro che vedere il maggior numero possibile di selettori, eventi ed effetti, per riuscire a padroneggiare al meglio questo potente strumento chiamato jQuery.</p>
<h2>Animare gli elementi cambiandone dinamicamente lo stile</h2>
<p>Per prima cosa dobbiamo definire la struttura HTML e CSS da manipolare.</p>
<p><strong>Codice HTML:</strong></p>
<pre class="brush: xml;">
&lt;ul id=&quot;animazione&quot;&gt;
    &lt;li&gt;Segui&lt;/li&gt;
    &lt;li&gt;i tutorial&lt;/li&gt;
    &lt;li&gt;di jquery&lt;/li&gt;
    &lt;li&gt;su&lt;/li&gt;
    &lt;li&gt;BitTrack.it&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p><strong>Codice CSS:</strong></p>
<pre class="brush: css;">
#animazione {
    list-style: none;
}
#animazione li {
    width: 200px;
    padding: 5px;
    border: 1px solid #ccc;
    background: #eee;
}
</pre>
<p>Il risultato è questo:</p>
<ul id="animazione">
<li>Segui</li>
<li>i tutorial</li>
<li>di jquery</li>
<li>su</li>
<li>BitTrack.it</li>
</ul>
<p>Una semplice lista con ID <em>animazione</em>, contenente elementi di larghezza 200px (210px per i più pignoli <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' />  ). Vogliamo far sì che, cliccando su un qualsiasi elemento della lista, la sua larghezza raddoppi a 400px con un&#8217;animazione.</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;

$(document).ready(function(){

    $(&quot;#animazione li&quot;).click(function(){
        $(this).animate({width: &quot;400px&quot;}, 1000);
    });

});

&lt;/script&gt;
</pre>
<p>Analizziamo il codice passo passo.</p>
<p>Con <strong>$(&#8220;#animazione li&#8221;)</strong> indico qualsiasi elemento
<li> appartenente alla lista con ID <em>animazione</em>, esattamente come avviene nel CSS. Usando l&#8217;evento <strong>.click(function){</strong> &#8230; <strong>});</strong> scrivo dentro alle graffe l&#8217;effetto che voglio ottenere.</p>
<p>Per eseguire un effetto però ho bisogno di un oggetto su cui lavorare e si da il caso che si tratti proprio dell&#8217;elemento che ho appena cliccato! Come fare per individuare esattamente quell&#8217;elemento della lista piuttosto che un altro? Usando <strong>$(this)</strong>.<br />
Si tratta di un selettore molto utile che, in questo caso, fa riferimento all&#8217;oggetto della funzione <em>click()</em>.</p>
<p>Cosa sia esattamente <strong>this</strong> non è semplice da spiegare (almeno per me), è una cosa che si riesce a comprendere a pieno soltanto con l&#8217;esperienza.<br />
Per ora ti basta sapere che, una volta fatto click su un elemento della lista, <strong>this</strong> indicherà esattamente quell&#8217;elemento; quindi non resta altro da fare che far partire l&#8217;effetto desiderato con <strong>animate()</strong>.</p>
<h2>Animate</h2>
<p><strong><a href="http://docs.jquery.com/Effects/animate#paramsdurationeasingcallback" target="_blank">Animate()</a></strong> è una funzione molto potente che ci permette di manipolare l&#8217;oggetto desiderato, cambiandone lo stile per mezzo di animazioni. Quando parlo di stile, intendo lo stesso che usiamo nei css. Per esempio, in questo caso dobbiamo aumentare la larghezza fino a 400px, scriverò:</p>
<pre class="brush: jscript;">$(this).animate({width: &quot;400px&quot;});</pre>
<p>Come vedi, i parametri dell&#8217;animazione (quelli tra parentesi graffe) vengono indicati in modo molto simile alle dichiarazioni del css (fatta eccezione per le virgolette).<br />
Altra cosa da notare, è il fatto che, come ti avevo preannunciato l&#8217;<a href="http://www.bittrack.it/archives/primi-passi-con-jquery-1/" target="_blank">altra volta</a>, i <strong>parametri</strong> di una funzione <strong>seguono una loro precisa formattazione</strong>.<br />
Nel caso di <em>animate()</em> devi inserire i parametri dell&#8217;animazione vera e propria dentro parentesi graffe e se vorrai indicare la durata dell&#8217;effetto (come nel nostro caso), dovrai inserirla al di fuori delle parentesi preceduta da una virgola, in questo modo.</p>
<pre class="brush: jscript;">$(this).animate({width: &quot;400px&quot;}, 1000);</pre>
<p>Questo è ciò che abbiamo ottenuto:</p>
<ul id="animazione1">
<li>Segui</li>
<li>i tutorial</li>
<li>di jquery</li>
<li>su</li>
<li>BitTrack.it</li>
</ul>
<h2>Eseguire la funzione inversa facendo click sullo stesso elemento</h2>
<p>L&#8217;animazione è riuscita alla grande, ma vediamo di rendere il nostro script più completo, facendo in modo che, cliccando una seconda volta sugli elementi la cui larghezza è aumentata, questi tornino alla situazione di partenza con un&#8217;altra animazione.</p>
<p>Anche quì ci sono molte strade, ma la pratica più usata consiste nell&#8217;assegnare una classe agli elementi la cui larghezza è stata portata a 400px, dopo di che, se viene fatto nuovamente click su uno di questi elementi, attraverso un controllo, saremo in grado di capire se la larghezza di quel dato elemento sia da aumentare o diminuire, a seconda che quella classe sia presente o no.</p>
<p>Anche in questo caso risulta troppo difficile da spiegare a parole, quindi passiamo ai fatti.</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;

$(document).ready(function(){

    $(&quot;#animazione li&quot;).click(function(){
        if($(this).hasClass(&quot;largo&quot;)){
            $(this).removeClass(&quot;largo&quot;).animate({width: &quot;200px&quot;}, 1000);
        } else{
            $(this).addClass(&quot;largo&quot;).animate({width: &quot;400px&quot;}, 1000);
        }
    });

});

&lt;/script&gt;
</pre>
<p>Analizzando il codice: come punto di partenza abbiamo sempre il click su un elemento della lista.</p>
<pre class="brush: jscript;">
    $(&quot;#animazione li&quot;).click(function(){
        //...
    });
</pre>
<p>Dopo di che, se quel preciso elemento possiede la classe <strong>largo</strong> (nome a caso scelto da me con molta fantasia) e quindi è già lungo 400px, riportalo a 200px e toglili la classe <strong>largo</strong>.</p>
<pre class="brush: jscript;">if( $(this).hasClass(&quot;largo&quot;) ) {
    $(this).removeClass(&quot;largo&quot;).animate({width: &quot;200px&quot;}, 1000);
}</pre>
<p>Altrimenti (cioè se non possiede quella data classe), aumenta la lunghezza a 400px e aggiungigli la classe <strong>largo</strong>.</p>
<pre class="brush: jscript;">
else{
    $(this).addClass(&quot;largo&quot;).animate({width: &quot;400px&quot;}, 1000);
}
</pre>
<p>Ecco il risultato finale:</p>
<ul id="animazione2">
<li>Segui</li>
<li>i tutorial</li>
<li>di jquery</li>
<li>su</li>
<li>BitTrack.it</li>
</ul>
<p>Mi scuso se sono andato un po&#8217; di fretta in questi ultimi passaggi, nonostante abbia utilizzato funzioni molto utili ed importanti tipo <strong>hasClass()</strong>, <strong>addClass</strong>,<strong> removeClass</strong>, ma il loro significato è talmente intuitivo ed evidente che non mi sembrava il caso di perderci troppo tempo.</p>
<h2>Fine</h2>
<p>Anche questa &#8220;lezione&#8221; è finita, spero di riuscire a pubblicare le prossime più velocemente, poichè gli argomenti da trattare su jQuery sono tantissimi, devo solo scegliere l&#8217;ordine da seguire. Come al solito, se hai suggerimenti o critiche, i commenti sono a tua disposizione. Alla prossima. <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_cool.png' alt='8)' class='wp-smiley' /> </p>


<p>Articoli correlati:<ol><li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-1/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 1'>Primi passi con jQuery &#8211; 1</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/' rel='bookmark' title='Permanent Link: Primi passi con jQuery – 3'>Primi passi con jQuery – 3</a></li>
<li><a href='http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/' rel='bookmark' title='Permanent Link: Creare un anteprima dinamica dei commenti'>Creare un anteprima dinamica dei commenti</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.bittrack.it/archives/primi-passi-con-jquery-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primi passi con jQuery &#8211; 1</title>
		<link>http://www.bittrack.it/archives/primi-passi-con-jquery-1/</link>
		<comments>http://www.bittrack.it/archives/primi-passi-con-jquery-1/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 22:43:33 +0000</pubDate>
		<dc:creator>Raspo</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.bittrack.it/?p=811</guid>
		<description><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/11/primi-passi-con-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="primi-passi-con-jquery" /></div>non c'è molto in Italiano per questo, vorrei condividerne la mia conoscenza con te, con una sorta di "<i>guida al jquery</i>", basata su semplici esempi pratici]]></description>
			<content:encoded><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/11/primi-passi-con-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="primi-passi-con-jquery" /></div><p><a href="http://jquery.com/" target="_blank">Jquery</a> è una libreria javascript molto potente che ci permette di estendere le potenzialità e funzionalità delle nostre pagine web con animazioni ed effetti vari.</p>
<p>Su Internet si possono trovare un infinità di tutorial a riguardo, ma che io sappia, non c&#8217;è molto in Italiano; dunque vorrei provare a condividerne la mia conoscenza con te, con una sorta di &#8220;<em>guida al jquery</em>&#8220;, basata su semplici esempi pratici piuttosto che concetti teorici.<span id="more-811"></span></p>
<h2>Preparazione</h2>
<p>Senza indugiare oltre, vai su <a href="http://jquery.com/" target="_blank">http://jquery.com/</a> e scarica l&#8217;ultima versione di jquery (al momento è la 1.3.2).</p>
<p>Quindi sposta il file<strong> jquery-1.3.2.min.js</strong> appena scaricato nella cartella dove andremo a fare i nostri primi esperimenti; nella stessa cartella aggiungi anche un file HTML vuoto.</p>
<p>Tutto quello che devi fare adesso per utilizzare la libreria, è includerla nella sezione <strong>&lt;head&gt;</strong> del codice HTML in questo modo.</p>
<pre class="brush: xml;">&lt;head&gt;

 &lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt;

&lt;/head&gt;</pre>
<p>Notare che se avessi spostato il file jquery-1.3.2.min.js in una sottocartella avresti dovuto scrivere:</p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;NOMECARTELLA/jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt;</pre>
<p>Adesso puoi cominciare a scrivere il tuo primo semplice script per vedere se tutto funziona.</p>
<h2>Test di funzionamento</h2>
<p><strong>Di seguito all&#8217;inclusione di jQuery</strong>, aggiungi un altro tag <strong>&lt;script&gt;</strong> e scrivi al suo interno il primo (fondamentale) codice jquery.</p>
<pre class="brush: xml;">&lt;head&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot;&gt;
   $(document).ready(function() {
     // fai qualcosa quando la pagina è stata caricata
   });
 &lt;/script&gt;
&lt;/head&gt;</pre>
<p>Quando si scrive un codice jquery, è importante cominciare con la scritta <em>$(document).ready(function() {</em> per indicare che tutto ciò che è scritto dopo la parentesi graffa (e prima della chiusura <em>}); </em>), verrà eseguito solo quando la pagina sarà completamente caricata.<br />
Spostati momentaneamente nel <strong>&lt;body&gt;</strong> per aggiungere un link da usare come pulsante per azionare lo script.</p>
<pre class="brush: xml;">&lt;a href=&quot;#&quot; id=&quot;prova&quot;&gt;Funziona?&lt;/a&gt;</pre>
<p>Visto che dobbiamo solamente testare il funzionamento della libreria, facciamo qualcosa di molto semplice.</p>
<pre class="brush: jscript;"> $(document).ready(function() {
   $(&quot;#prova&quot;).click(function() {
     alert(&quot;Certo che funziona!&quot;);
     return false;
   });
 });</pre>
<p>Ecco la spiegazione a grandi linee del codice. Quando viene fatto click su<strong> $(&#8220;#prova&#8221;)</strong>, cioè, l&#8217;elemento con ID &#8220;<em>prova</em>&#8220;, esegue una funzione che mostra un messaggio di <strong>alert</strong> che dice: <em>Certo che funziona!</em></p>
<p>Nota: il comando <strong>return false;</strong> non è indispensabile ai fini della funzione, serve solo ad evitare che cliccando, l&#8217;utente venga realmente reindirizzato alla pagina indicata nel <strong>href </strong>del link (in questo caso <strong>#</strong> farebbe scrollare improvvisamente la pagina verso l&#8217;alto).</p>
<p><code><a id="prova" href="#"><strong>Funziona?</strong></a></code></p>
<p>Se appare l&#8217;alert significa che jquery funziona correttamente!</p>
<p>Anche se per ora il codice scritto non ti risulta molto chiaro, con qualche altro esempio e un minimo di pratica, capirai quanto jQuery sia effettivamente semplice.</p>
<h2>Mostra e nascondi elementi</h2>
<p>Per ora sei riuscito a far apparire un messaggio di alert, che come effetto non è poi un granchè, proviamo dunque con qualcosa di più interessante <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_smile.png' alt=':)' class='wp-smiley' />  .</p>
<p>Per prima cosa c&#8217;è bisogno degli elementi HTML da manipolare.</p>
<pre class="brush: xml;">&lt;a href=&quot;#&quot; id=&quot;prova2&quot;&gt;Fatti vedere!&lt;/a&gt;
&lt;span class=&quot;hide&quot; style=&quot;display: none&quot;&gt;Eccomi.&lt;/span&gt;</pre>
<p>Un link con ID <strong>prova2</strong> e uno span con classe<strong> hide</strong> che però ho nascosto con <em>style=&#8221;display: none&#8221; </em>(avrei potuto fare lo stesso da un file css esterno).</p>
<p>Vogliamo fare in modo che cliccando sul link &#8220;Fatti vedere!&#8221;, appaia lo span con la scritta <em>Eccomi</em>.</p>
<p><code><strong><a id="prova2" href="#">Fatti vedere!</a></strong> <span class="hide" style="display: none">Eccomi.</span></code></p>
<p>Vediamo il codice jquery. Ricordati che deve essere incluso nel solito <em>$(document).ready(function() {</em>.</p>
<pre class="brush: jscript;">$(document).ready(function() {

  //... altro codice

  $(&quot;#prova2&quot;).click(function() {
     //scrivi qui cosa succede dopo il click
  });

});</pre>
<p>Come prima, ho usato l&#8217;evento <em>.click</em> sul link per far partire la funzione. Ma hai fatto caso che lo <em>span</em> che dobbiamo far apparire ha una classe anziché un ID? Come li distinguo in jquery? Semplicissimo, esattamente come nel CSS: &#8220;<strong>#</strong>&#8221; sta per ID e &#8220;<strong>.</strong>&#8221; sta per classe. Quindi <strong>$(&#8220;.hide&#8221;)</strong> rappresenterà l&#8217;elemento (o gli elementi) con classe &#8220;hide&#8221;.</p>
<pre class="brush: jscript;">
  $(&quot;#prova2&quot;).click(function() {
     $(&quot;.hide&quot;).fadeIn();
     return false;
  });
</pre>
<p>Per far apparire un elemento che è inizialmente nascosto, ci sono molti modi in jquery, io ho voluto usare il <a href="http://docs.jquery.com/Effects/fadeIn#speedcallback" target="_blank"><strong>.fadeIn()</strong></a>. Se vuoi puoi provare anche con <a href="http://docs.jquery.com/Effects/show" target="_blank"><strong>.show()</strong></a> che mostra l&#8217;elemento immediatamente, senza alcuna &#8220;transizione&#8221;.</p>
<h2>Parametri</h2>
<p>Come ultima cosa per oggi vediamo di passare qualche parametro al <em>fadeIn()</em> per allungarne la durata dell&#8217;effetto. I parametri di una funzione vanno inseriti nelle parentesi tonde quando questa viene chiamata.</p>
<pre class="brush: jscript;">
     $(&quot;.hide&quot;).fadeIn( PARAMETRI DELLA FUNZIONE );
</pre>
<p>Ovviamente, ogni funzione supporta solo un certo tipo di parametri che andranno scritti con una certa formattazione, con attenzione a virgole, virgolette, parentesi graffe, ect.</p>
<p>In questo caso, però, vogliamo solo impostare il tempo di durata dell&#8217;effetto<em> fadeIn</em>, che <strong>essendo un parametro numerico</strong> (espresso in millisecondi), basterà scriverlo nelle parentesi senza ulteriore formattazione.</p>
<pre class="brush: jscript;">
  $(&quot;#prova3&quot;).click(function() {
     $(&quot;.hide2&quot;).fadeIn(3000);
     return false;
  });
</pre>
<p>Proviamo con 3000, cioè 3 secondi.</p>
<p><code><strong><a id="prova3" href="#">FadeIn di 3 secondi</a></strong> <span class="hide2" style="display: none">Eccomi.</span></code></p>
<h2>Fine (per ora)</h2>
<p>Questa era la prima &#8220;lezione&#8221; di jquery, spero sia stata di tuo gradimento, perché ho intenzione di farne altre. Se hai bisogno di chiarimenti o vuoi fare qualche critica, un commento è ben gradito. Stay tuned! <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_cool.png' alt='8)' class='wp-smiley' /> </p>


<p>Articoli correlati:<ol><li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-2/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 2'>Primi passi con jQuery &#8211; 2</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/' rel='bookmark' title='Permanent Link: Primi passi con jQuery – 3'>Primi passi con jQuery – 3</a></li>
<li><a href='http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/' rel='bookmark' title='Permanent Link: Creare un anteprima dinamica dei commenti'>Creare un anteprima dinamica dei commenti</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.bittrack.it/archives/primi-passi-con-jquery-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Creare un anteprima dinamica dei commenti</title>
		<link>http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/</link>
		<comments>http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 21:59:51 +0000</pubDate>
		<dc:creator>Raspo</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[funzioni]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.bittrack.it/?p=703</guid>
		<description><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/10/anteprima-commento.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="anteprima-commento" /></div>Avere un anteprima del commento che si sta scrivendo, risulta molto utile, specialmente se si vuole utilizzare qualche tag html tipo quello per inserire link, citazioni o mettere il testo grassetto, o in corsivo. Per far ciò bastano poche semplici righe di jquery.
Codice HTML
Innanzitutto ci serve il codice HTML della textarea in cui l&#8217;utente inserisce il [...]]]></description>
			<content:encoded><![CDATA[<div><img width="200" height="200" src="http://www.bittrack.it/wp-content/uploads/2009/10/anteprima-commento.jpg" class="attachment-post-thumbnail wp-post-image" alt="" title="anteprima-commento" /></div><p>Avere un anteprima del commento che si sta scrivendo, risulta molto utile, specialmente se si vuole utilizzare qualche tag html tipo quello per inserire link, citazioni o mettere il testo grassetto, o in corsivo. Per far ciò bastano poche semplici righe di <strong>jquery</strong>.<span id="more-703"></span></p>
<h2>Codice HTML</h2>
<p>Innanzitutto ci serve il codice HTML della textarea in cui l&#8217;utente inserisce il commento.</p>
<pre class="brush: xml;">
&lt;body&gt;

	&lt;h3&gt;Inserisci del testo per far apparire l'anteprima&lt;/h3&gt;
	&lt;textarea id=&quot;commento&quot;&gt;&lt;/textarea&gt;

&lt;/body&gt;
</pre>
<p>Di seguito aggiungiamo un DIV vuoto, dove vogliamo che appaia l&#8217;anteprima e diamoli un id, in questo caso l&#8217;ho chiamato &#8220;anteprima&#8221;.</p>
<pre class="brush: xml;">&lt;body&gt;

	&lt;h3&gt;Inserisci un commento per far apparire l'anteprima&lt;/h3&gt;
	&lt;textarea id=&quot;commento&quot;&gt;&lt;/textarea&gt;

	&lt;div id=&quot;anteprima&quot;&gt;
		&lt;h3&gt;Anteprima del commento&lt;/h3&gt;
		&lt;div&gt;&lt;!-- l'anteprima apparirà qui --&gt;&lt;/div&gt;
	&lt;/div&gt;

&lt;/body&gt;
</pre>
<p>Per l&#8217;esattezza, l&#8217;anteprima del commento non apparirà dentro al div &#8220;<em>anteprima</em>&#8221; ma in quello vuoto che si trova al suo interno.</p>
<p>Nascondiamo il tutto con un tocco di CSS.</p>
<pre class="brush: css;">#anteprima {
	display: none;
}</pre>
<p>In questo modo, non vedremo neanche la scritta &#8220;Anteprima del commento&#8221;;  lo faremo riapparire al momento giusto con lo script.</p>
<h2>Script Jquery</h2>
<p>Come al solito, assicuriamoci di aver incluso la libreria jquery nell&#8217;head e usando un file esterno o la stessa pagina html, creiamo il nostro script.</p>
<pre class="brush: jscript;">$(document).ready(function(){

	$(&quot;#commento&quot;).keyup(function() {
          //funzione da eseguire
	});

});</pre>
<p>Per far sì che lo script inizi a lavorare, usiamo l&#8217;<a href="http://docs.jquery.com/Events/keyup" target="_blank">evento jquery <strong>keyup</strong></a>, che esegue una certa funzione quando viene premuto (e rilasciato) un tasto mentre il focus si trova sulla textarea (che ha ID commento).</p>
<pre class="brush: jscript;">$(document).ready(function(){

	$(&quot;#commento&quot;).keyup(function () {
		var comment = $(this).val();
		$(&quot;#anteprima&quot;).show().children('div').html(comment);
	});

});</pre>
<p>La funzione da eseguire è molto semplice:</p>
<ol>
<li>Prendo il contenuto della textarea e lo salvo nella variabile <strong>comment</strong>.</li>
<li>Faccio apparire il div con id <em>anteprima</em></li>
<li>Seleziono l&#8217;altro div vuoto che si trova al suo interno e vi scrivo il contenuto della variabile <strong>comment</strong> (cioè il testo del commento stesso)</li>
</ol>
<p>Abbiamo quasi finito, basta fare qualche prova e vediamo che i vari tag html tipo &lt;a&gt;, &lt;strong&gt;, &lt;i&gt; vengono perfettamente &#8220;interpretati&#8221; nell&#8217;anteprima.</p>
<p>C&#8217;è solo un problema: quando premiamo invio, il testo non va a capo ma aggiunge semplicemente uno spazio.</p>
<pre class="brush: jscript;">$(document).ready(function(){

	$(&quot;#commento&quot;).keyup(function () {
		var comment = $(this).val().replace(/\n/g, &quot;&lt;br /&gt;&quot;);
		$(&quot;#anteprima&quot;).show().children('div').html(comment);
	});

});</pre>
<p>Per correggere questo errore, basta agire sulla variabile comment e sostituire i <strong>\n</strong>, cioè i &#8220;simboli delle andate a capo&#8221; con dei <strong>&lt;br /&gt;</strong>.</p>
<h2>Fine</h2>
<p>Adesso lo script è completo e pronto all&#8217;uso. Puoi sperimentarlo aggiungendo un commento su questa pagina!</p>
<p style="text-align: center;"><a class="down" href="http://www.bittrack.it/download/anteprima%20commento.zip">Download</a></p>


<p>Articoli correlati:<ol><li><a href='http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/' rel='bookmark' title='Permanent Link: Creare un ajax contact form con validazione dei dati'>Creare un ajax contact form con validazione dei dati</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-2/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 2'>Primi passi con jQuery &#8211; 2</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-1/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 1'>Primi passi con jQuery &#8211; 1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Creare un ajax contact form con validazione dei dati</title>
		<link>http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/</link>
		<comments>http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 23:53:45 +0000</pubDate>
		<dc:creator>Raspo</dc:creator>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[contact]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[funzioni]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bittrack.it/?p=668</guid>
		<description><![CDATA[<div><img src="http://www.bittrack.it/wp-content/uploads/2009/10/contact-form.png" class="attachment-post-thumbnail wp-post-image" alt="" title="contact-form" /></div>Con questo tutorial ti spiegherò come realizzare un form, da usare nella tua pagina contatti, per l&#8217;invio di email tramite ajax (quindi senza bisogno di ricaricare la pagina) con tanto di validazione dei dati inseriti.
Caratteristiche

Ogni campo ha dei dati predefiniti che vengono cancellati quando questo ottiene il “focus”
Se l’utente non inserisce dei dati obbligatori o [...]]]></description>
			<content:encoded><![CDATA[<div><img src="http://www.bittrack.it/wp-content/uploads/2009/10/contact-form.png" class="attachment-post-thumbnail wp-post-image" alt="" title="contact-form" /></div><p>Con questo tutorial ti spiegherò come realizzare un form, da usare nella tua pagina contatti, per l&#8217;invio di email tramite ajax (quindi senza bisogno di ricaricare la pagina) con tanto di validazione dei dati inseriti.<span id="more-668"></span></p>
<h2>Caratteristiche</h2>
<ol>
<li>Ogni campo ha dei dati predefiniti che vengono cancellati quando questo ottiene il “focus”</li>
<li>Se l’utente non inserisce dei dati obbligatori o un indirizzo email valido, lo script notifica l’errore evidenziando in rosso i campi errati.</li>
<li>L’email viene inviata tramite ajax e restituisce un messaggio di notifica al termine dell’operazione</li>
<li>L&#8217;invio dell&#8217;email deve poter funzionare anche con javascript disabilitati.</li>
</ol>
<p>Per avere un idea più chiara di ciò che andremo a creare, ecco una demo funzionante del “prodotto finito”.</p>
<p style="text-align: center;"><a class="demo" href="http://www.bittrack.it/demo/ajax-contact-form/index.html" target="blank">LINK DEMO</a></p>
<h2>Preparazione</h2>
<p>Per iniziare avrai bisogno di una pagina html “di base”.</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;it-IT&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;

		&lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot;/&gt;

		&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot; &gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;contatti.js&quot;&gt;&lt;/script&gt;

		&lt;title&gt;Contatti&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Notare l&#8217;inclusione della <strong>libreria jquery</strong> (direttamente dai server Google <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_cool.png' alt='8)' class='wp-smiley' /> ), di uno <strong>style.css</strong> e del <strong>contatti.js</strong> che sarà lo script con cui lavoreremo maggiormente.</p>
<h2>Aggiunta del contenuto</h2>
<p>Per adesso non abbiamo scritto nulla, perciò prosegui con l&#8217;inserimento di un po&#8217; di contenuto. I campi nome, e-mail, testo sono indispensabili e perchè no, anche un campo non obbligatorio per aggiungere un eventuale proprio sito web, oltre che ovviamente il pulsante di invio; il tutto incluso nel canonico <strong>&lt;form&gt;</strong> che  punta ad un certo<strong> inviaemail.php</strong>.</p>
<pre class="brush: xml;">&lt;form method=&quot;post&quot; name=&quot;contatti&quot; id=&quot;contatti&quot; action=&quot;inviaemail.php&quot;&gt;
	&lt;div id=&quot;contact_area&quot;&gt;
		&lt;h2&gt;Contattaci direttamente via email&lt;/h2&gt;

		&lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;name&quot; class=&quot;form&quot; value=&quot;Nome*&quot; /&gt;

		&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; class=&quot;form&quot; value=&quot;e-Mail*&quot; /&gt;

		&lt;input type=&quot;text&quot; name=&quot;sito&quot; id=&quot;sito&quot; class=&quot;form&quot; value=&quot;Sito Web&quot; /&gt;

		&lt;textarea name=&quot;message&quot; id=&quot;testo&quot; class=&quot;form&quot; rows=&quot;12&quot; cols=&quot;&quot; &gt;Testo*&lt;/textarea&gt;

		&lt;div&gt;
			&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id=&quot;invia&quot; value=&quot;Invia&quot;/&gt;
			&lt;img src=&quot;load.gif&quot; alt=&quot;load&quot; id=&quot;load_img&quot; /&gt;
			&lt;span id=&quot;result&quot;&gt;&lt;/span&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/form&gt;
</pre>
<p>Sono da segnalare gli <strong>ID</strong> che corrispondono esattamente ai <strong>name</strong> dei vari campi (questo ci tornerà molto utile per la gestione dai dati da php in caso di javascript disabilitati), la presenza di un immagine di caricamento accanto al pulsante e uno span con ID<strong> result</strong> al momento vuoto. La classe <strong>form</strong> come anche l&#8217;ID <strong>contact_area</strong> sono del tutto arbitrari, servono solo a facilitare il lavoro sul CSS.</p>
<h2>Un po&#8217; di stile CSS</h2>
<p>Se provi a visualizzare questa pagina nel browser il risultato non sarà certo dei migliori.</p>
<p><a href="http://www.bittrack.it/wp-content/uploads/2009/10/form-senza-stile.png"><img class="alignnone size-medium wp-image-689" title="form-senza-stile" src="http://www.bittrack.it/wp-content/uploads/2009/10/form-senza-stile-600x249.png" alt="form-senza-stile" width="600" height="249" /></a></p>
<p>Senza perdere altro tempo aggiungi un po&#8217; di stile in un nuovo file CSS che dovrai chiamare <strong>style.css</strong> come indicato nell&#8217;head dell&#8217;HTML.</p>
<pre class="brush: css;">body {
	margin: 0;
	background: #ddd;
	color: #000;
}

h2 {
	font: bold 22px verdana;
	color: #333;
}

#contact_area  {
	width: 500px;
	margin: 0 auto;
}

.form {
	margin: 0 0 10px 0;
	width: 500px;
	font: normal 13px verdana;
	border: 1px solid #aaa;
	background: #eee;
	padding: 6px 10px;
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
}

#invia {
	font: normal 16px verdana;
	border: 1px solid #aaa;
	background: #c9c9c9;
	padding: 2px 10px;
	margin: 0 10px 0 0;
	cursor: pointer;
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
}

#load_img {
	display: none;
	line-height: 26px;
}

.error {
	border: 1px solid #ff5c5c
}

.fail {
	color: #F80000
}

.success {
	color: #009600
}</pre>
<p>Non ho alcuna intensione di soffermarmi sui vari accorgimenti usati nel CSS, ma devo far notare che abbiamo nascosto l&#8217;immagine di caricamento (linea 40) ed aggiunto le classi <strong>error</strong>, <strong>fail</strong>, <strong>success</strong> il cui scopo sarà più chiaro in seguito.</p>
<p><a href="http://www.bittrack.it/wp-content/uploads/2009/10/form-con-stile.png"><img class="alignnone size-medium wp-image-694" title="form-con-stile" src="http://www.bittrack.it/wp-content/uploads/2009/10/form-con-stile-600x431.png" alt="form-con-stile" width="600" height="431" /></a></p>
<p>Direi senza alcun dubbio che l&#8217;aspetto è migliorato <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' />  .</p>
<h2>Aggiunta del motore (jquery)</h2>
<p>Ora che hai tutto pronto, entriamo nel vivo della programmazione<strong> jquery</strong>. Crea il file <strong>contatti.js</strong> e aggiungi queste prime linee di codice.</p>
<pre class="brush: jscript;">$().ready(function(){

	//variabili globali
	var name = $(&quot;#name&quot;);
	var nameText = $(name).val();
	var email = $(&quot;#email&quot;);
	var emailText = $(email).val();
	var sito = $(&quot;#sito&quot;);
	var sitoText = $(sito).val();
	var message = $(&quot;#testo&quot;);
	var messageText = $(message).val();

});</pre>
<p>Per adesso abbiamo solo dichiarato alcune variabili globali che useremo da quì in avanti. In particolare, abbiamo assegnato una variabile ad ogni campo della pagina HTML e ne abbiamo salvato il contenuto in un&#8217;altra variabile.</p>
<p>Per esempio, il campo con ID <strong>name</strong>, sarà indicato d&#8217;ora in poi semplicemente con &#8220;<strong>name</strong>&#8221; ed il suo contenuto predefinito, quello che possiede nel momento in cui la pagina viene caricata  (in questo caso &#8220;<em>Nome*</em>&#8220;), verrà memorizzato nella variabile <strong>nameText</strong>.</p>
<h2>Gestione dei valori di default nei singoli campi</h2>
<p>Per far sì che i valori dei campi si azzerino quando ricevono il focus e tornino come predefiniti se non viene inserito alcun dato, aggiungi queste semplici funzioni.</p>
<pre class="brush: jscript;">	//name
	name.focus(function(){
		if($(this).val() == nameText) $(this).val(&quot;&quot;);
	});
	name.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(nameText);
	});
	//email
	email.focus(function(){
		if($(this).val() == emailText) $(this).val(&quot;&quot;);
	});
	email.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(emailText);
	});
	//Sito web
	sito.focus(function(){
		if($(this).val() == sitoText) $(this).val(&quot;&quot;);
	});
	sito.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(sitoText);
	});
	//message
	message.focus(function(){
		if($(this).val() == messageText) $(this).val(&quot;&quot;);
	});
	message.blur(function(){
		if($(this).val() == &quot;&quot;) $(this).val(messageText);
	});</pre>
<p>In tal modo, quando viene selezionato (<strong>.focus</strong>) un certo campo, la funzione ne azzera il contenuto se questo corrisponde a quello predefinito nell&#8217;HTML e quando il focus viene perso (<strong>.blur</strong>), se l&#8217;utente non ha aggiunto alcunchè, lasciando il campo vuoto, ne ripristina il valore predefinito.</p>
<h2>Validazione dei contenuti</h2>
<p>Per eseguire la validazione dei dati inseriti dall&#8217;utente, creeremo una funzione apposita per ogni campo che ne valuti la correttezza secondo criteri del tutto arbitrari. In questo caso, abbiamo imposto una lunghezza minima di nome utente e testo dell&#8217;email a 4 caratteri, mentre l&#8217;email dovrà rispettare la canonica forma <em>[qualcosa]@[qualcosa].[qualcosa]</em> .</p>
<pre class="brush: jscript;">function validateEmail(){
		var a = $(&quot;#email&quot;).val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		if(filter.test(a)){
			$(&quot;#email&quot;).removeClass(&quot;error&quot;);
			return true;
		}
		else{
			$(&quot;#email&quot;).addClass(&quot;error&quot;);
			return false;
		}
	}
	function validateName(){
		if((name.val().length &lt; 4) || (name.val() == nameText)){
			name.addClass(&quot;error&quot;);
			return false;
		}
		else{
			name.removeClass(&quot;error&quot;);
			return true;
		}
	}
	function validateMessage(){
		if((message.val().length &lt; 4) || (message.val() == messageText)){
			message.addClass(&quot;error&quot;);
			return false;
		}
		else{
			message.removeClass(&quot;error&quot;);
			return true;
		}
	}	</pre>
<p>Per il controllo sulla lunghezza di un campo abbiamo usato la funzione <strong>.lenght</strong> che restituisce il numero di caratteri di una stringa; la validazione dell&#8217;email è invece un po&#8217; più complessa poiché fa uso di una regex confrontata alla stringa con la funzione <strong>.test()</strong>, quindi prendila pure per buona <img src='http://www.bittrack.it/wp-includes/images/smilies/icon_razz.png' alt=':P' class='wp-smiley' /> .</p>
<p>Un ulteriore controllo è stato eseguito sui campi testo e nome che non devono essere uguali a quelli preimpostati (linee 14 e 24), infatti, essendo &#8220;<em>Nome*</em>&#8221; e &#8220;<em>Testo*</em>&#8221; di per sé due stringhe più lunghe di 4 caratteri, verrebbe vanificata la validazione.</p>
<p>Notare inoltre, che ciascuna funzione restituisce <strong>false</strong> e aggiunge una classe <strong>error</strong> a quel campo, se la validazione ha avuto esito negativo; altrimenti, restituisce <strong>true</strong> e toglie la classe error (nel caso sia stata precedentemente applicata).</p>
<h2>Passaggio dei dati con Ajax</h2>
<p>Adesso non resta che inviare i dati al php tramite ajax.</p>
<pre class="brush: jscript;">	$(&quot;#contatti&quot;).submit(function(){
		if(!validateName() | !validateEmail() | !validateMessage()){
			return false;
		}
		else {
			//Invia email con ajax
		}
	});</pre>
<p>Prendiamo il click sul pulsante invia (o meglio il submit del form con id contatti) come evento da cui partire e quindi sottoporre i dati alla validazione.</p>
<pre class="brush: jscript;">       else {
			$('#load_img').fadeIn();
			$.ajax({
				type: 'post',
				url: 'inviaemail.php',
				data: 'name=' + name.val() + '&amp;email=' + email.val() + '&amp;site=' + sito.val() + '&amp;message=' + message.val(),

                                //.........

			}); // end ajax
			return false;
		}
</pre>
<p>Se la validazione viene superata: faccio apparire l&#8217;immagine di caricamento con un effetto fade in (linea 2) e poi, con <strong>metodo POST </strong>(linea 4), invio al file <strong>inviaemail.php</strong>, che si trova nella stessa cartella (linea 5), i dati contenuti all&#8217;interno dei vari campi, assegnando ad ognuno una variabile da far gestire al php (linea 6).</p>
<p>Prima di proseguire devi però sapere come è strutturato il  file <strong>inviaemail.php</strong>.</p>
<h2>Invio dell&#8217;email con PHP</h2>
<p>La parte php è piuttosto semplice.</p>
<pre class="brush: php;">
&lt;?php

	$mailTo = 'tuaemail@qualcosa.boh';

?&gt;</pre>
<p>Assegno alla variabile <strong>mailTo</strong> il mio indirizzo email dove voglio ricevere tutti i messaggi del contact form.</p>
<pre class="brush: php;">
	$name = htmlspecialchars($_POST['name']);
	$mailFrom = htmlspecialchars($_POST['email']);
	$siteurl = htmlspecialchars($_POST['site']);
	$message_text = htmlspecialchars($_POST['message']);
	$subject = 'Messaggio dal contact form';</pre>
<p>Prendo le variabili che mi ha precedentemente inviato ajax con metodo POST, le sottopongo alla funzione del php <strong>htmlspecialchars </strong>per correggere eventuali caratteri speciali e ne passo il contenuto in altrettante variabili php. Aggiungo anche un oggetto all&#8217;email, che mi faccia capire di cosa si tratta quando me la ritroverò nella casella di posta.</p>
<p><strong>Aggiornato. </strong>Perché l&#8217;email risulti leggibile, è bene far in modo che appaia nel formato HTML. Aggiungo dunque una variabile headers con queste informazioni.</p>
<pre class="brush: php;">	$headers = 'Content-type: text/html; charset=UTF-8' . &quot;\r\n&quot;;
	$headers .= 'From: '.$mailFrom;</pre>
<p>La presenza del parametro <strong>From</strong> inoltre, evita che l&#8217;email appaia nella casella spam di certi servizi webmail tipo GMail.</p>
<pre class="brush: php;">	$message =  &quot;&lt;html&gt;
					&lt;head&gt;
						&lt;title&gt; $subject &lt;/title&gt;
					&lt;/head&gt;
				&lt;body&gt;
					&lt;p&gt;----------------------------------------&lt;/p&gt;
					&lt;b&gt;Nome Utente:&lt;/b&gt; $name&lt;br /&gt;
					&lt;b&gt;e-Mail:&lt;/b&gt; $mailFrom&lt;br /&gt;
					&lt;b&gt;Sito:&lt;/b&gt; $siteurl&lt;br /&gt;
					&lt;b&gt;Testo della richiesta:&lt;/b&gt;&lt;br /&gt;
					&lt;p&gt;$message_text&lt;/p&gt;
					&lt;p&gt;----------------------------------------&lt;/p&gt;
				&lt;/body&gt;
				&lt;/html&gt;&quot;;</pre>
<p>Riunisco tutti i dati in un&#8217;ulteriore variabile <strong>message</strong>, in modo da comporre effettivamente il testo del messaggio di posta che riceverò. Notare la presenza di tutti i canonici tag HTML.</p>
<pre class="brush: php;">
	if (mail($mailTo, $subject, $message, $headers))
		echo &quot;email inviata!&quot;;
	else {
		echo &quot;Errore&quot;;
	}</pre>
<p>Con il comando <strong>mail()</strong> viene inviata effettivamente l&#8217;email e se non ci sono stati errori da parte del server in quest&#8217;ultima operazione, scrive il messaggio &#8220;<em>email inviata!</em>&#8220;; altrimenti scrive &#8220;<em>Errore</em>&#8220;.</p>
<h2>Completamento del codice ajax</h2>
<p>Adesso che sai cosa succede dal lato php, torniamo al nostro ajax.</p>
<pre class="brush: jscript;">
		else {
			$('#load_img').fadeIn();
			$.ajax({
				type: 'post',
				url: 'inviaemail.php',
				data: 'name=' + name.val() + '&amp;email=' + email.val() + '&amp;site=' + sito.val() + '&amp;message=' + message.val(),
				success: function(results) {
					$('#load_img').fadeOut(function() {
						if(results == &quot;email inviata!&quot;) {
							$('#result').html(&quot;&lt;span class='success'&gt;e-Mail inviata correttamente&lt;/span&gt;&quot;);
							$(name).val(nameText);
							$(email).val(emailText);
							$(sito).val(sitoText);
							$(message).val(messageText);
						}
						else
							$('#result').html(&quot;&lt;span class='fail'&gt;Errore&lt;/span&gt;&quot;)
					});
				}
			}); // end ajax
			return false;
		}
</pre>
<p>Dopo l&#8217;invio dei dati al php alla riga 6, siamo pronti a ricevere il risultato dell&#8217;operazione e salvarlo in una variabile qualsiasi che abbiamo chiamato result.</p>
<p>Nascondiamo l&#8217;immagine di caricamento (linea 8 ) e se il risultato del php corrisponde a ciò che avevamo scritto col comando echo, significa che l&#8217;email è stata inviata e possiamo dunque scrivere sulla pagina HTML (dentro a quell&#8217;inutilizzato span con id results) una notifica di operazione completata con successo; dato che l&#8217;email è stata inviata, possiamo anche riazzerare i campi ai valori predefiniti.<br />
Se c&#8217;è stato un problema sul php, mostreremo invece un messaggio di errore.</p>
<h2>Con i javascript disabilitati?</h2>
<p>Nel caso si tenti di inviare un email con i javascript disabilitati, non ci sarà alcun tipo di controllo sulla validazione dei dati, ma l&#8217;email verrà comunque inviata, poiché le variabili che abbiamo preso con metodo POST nel php corrispondono esattamente ai parametri <strong>name=&#8221;"</strong> assegnati  nell&#8217;HTML  ai vari campi.</p>
<p>Inviando l&#8217;email senza javascript, vieni rimandato alla pagina inviaemail.php contenente la sola scritta &#8220;<em>email inviata!</em>&#8221; oppure &#8220;<em>Errore</em>&#8221; nel caso si siano verificati o no errori sul php.</p>
<h2>Conclusioni</h2>
<p>Sperando che ti sia stato di aiuto, ti lascio i link per la demo ed il download del pacchetto completo.</p>
<p>Per qualsiasi tipo di osservazione o critica, un commento è sempre bene accetto!</p>
<p style="text-align: center;"><a class="demo" href="http://www.bittrack.it/demo/ajax-contact-form/index.html" target="blank">LINK DEMO</a> <a class="down" href="http://www.bittrack.it/download/ajax-contact-form.zip">link download</a></p>


<p>Articoli correlati:<ol><li><a href='http://www.bittrack.it/archives/creare-un-anteprima-dinamica-dei-commenti/' rel='bookmark' title='Permanent Link: Creare un anteprima dinamica dei commenti'>Creare un anteprima dinamica dei commenti</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-%e2%80%93-3/' rel='bookmark' title='Permanent Link: Primi passi con jQuery – 3'>Primi passi con jQuery – 3</a></li>
<li><a href='http://www.bittrack.it/archives/primi-passi-con-jquery-2/' rel='bookmark' title='Permanent Link: Primi passi con jQuery &#8211; 2'>Primi passi con jQuery &#8211; 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.bittrack.it/archives/creare-un-ajax-contact-form-con-validazione-dei-dati/feed/</wfw:commentRss>
		<slash:comments>58</slash:comments>
		</item>
	</channel>
</rss>
