<?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>Dawid Pośliński &#187; jquery</title>
	<atom:link href="http://blog.poslinski.net/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.poslinski.net</link>
	<description>Code is poetry.</description>
	<lastBuildDate>Sun, 27 Feb 2011 11:30:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>jQuery: unselect w WebKit?</title>
		<link>http://blog.poslinski.net/jquery-unselect-w-webkit/</link>
		<comments>http://blog.poslinski.net/jquery-unselect-w-webkit/#comments</comments>
		<pubDate>Fri, 14 May 2010 20:04:56 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[unselect]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=599</guid>
		<description><![CDATA[Pod przeglądarkami bazującymi na silniku WebKit w przypadku ustawienia .focus na polu, pojawia się problem zaznaczonego tekstu. Jak w łatwy sposób sobie z nim poradzić, aby np. kliknięcie na dowolny klawisz nie wyczyściło nam inputa? Rozwiązanie Cała sztuczka polega na pobraniu wartości inputa, za pomocą metody val(); var content = $("input[name=nazwaPola]").val(); Oraz po wykonaniu .focus, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/05/unselect_w_webkit.png"><img src="http://blog.poslinski.net/wp-content/uploads/2010/05/unselect_w_webkit.png" alt="jQuery unselect w Webkit" title="unselect_w_webkit" width="620" height="150" class="aligncenter size-full wp-image-602" /></a>Pod przeglądarkami bazującymi na silniku WebKit w przypadku ustawienia .focus na polu, pojawia się problem zaznaczonego tekstu. Jak w łatwy sposób sobie z nim poradzić, aby np. kliknięcie na dowolny klawisz nie wyczyściło nam inputa?<span id="more-599"></span></p>
<h2>Rozwiązanie</h2>
<p>Cała sztuczka polega na pobraniu wartości inputa, za pomocą metody val();</p>
<pre name="code" class="javascript">var content = $("input[name=nazwaPola]").val();</pre>
<p>Oraz po wykonaniu .focus, nadpisaniu wartości ponownie do pola, co odznaczy tekst w polu.</p>
<pre name="code" class="javascript">$("input[name=nazwaPola]").focus.val(content);</pre>
<p>Prawda, że proste?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jquery-unselect-w-webkit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Warto zobaczyć #3</title>
		<link>http://blog.poslinski.net/warto-zobaczyc-3/</link>
		<comments>http://blog.poslinski.net/warto-zobaczyc-3/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 23:31:09 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[inne]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=235</guid>
		<description><![CDATA[Kolejna paczka, interesujących znalezisk, z którymi warto się zaznajomić. jQuery http://jqueryfordesigners.com/ Świetna strona dla programistów korzystających z jQuery. http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/ Dobrze opisane zapytania Ajaxowe z wykorzystaniem jQuery. XNA http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541 Tekstury Paint.NET do XNA. http://xnaviewer.codeplex.com/ Kontrolka, pozwalająca na korzystanie z dobrodziejstw XNA w aplikacjach typu WindowsForms. Nie trudno sobie wyobrazić zastosowanie np. przy tworzeniu map. Inne http://www.bugmenot.com [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-411" title="warto-zobaczyc-3" src="http://blog.poslinski.net/wp-content/uploads/2009/09/warto-zobaczyc-3.jpg" alt="warto-zobaczyc-3" width="620" height="150" />Kolejna paczka, interesujących znalezisk, z którymi warto się zaznajomić.</p>
<h2><span id="more-235"></span>jQuery</h2>
<p><a href="http://jqueryfordesigners.com/">http://jqueryfordesigners.com/</a><br />
Świetna strona dla programistów korzystających z jQuery.<br />
<a href="http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/">http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/</a><br />
Dobrze opisane zapytania Ajaxowe z wykorzystaniem jQuery.</p>
<h2>XNA</h2>
<p><a href="http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541">http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541</a><br />
Tekstury Paint.NET do XNA.<br />
<a href="http://xnaviewer.codeplex.com/" target="_blank">http://xnaviewer.codeplex.com/</a><br />
Kontrolka, pozwalająca na korzystanie z dobrodziejstw XNA w aplikacjach typu WindowsForms. Nie trudno sobie wyobrazić zastosowanie np. przy tworzeniu map.</p>
<h2>Inne</h2>
<p><a href="http://www.bugmenot.com">http://www.bugmenot.com</a><br />
Dzięki tej stronie, nie trzeba się rejestrować na różne serwisy społecznościowe, itp., aby móc w pełni przeglądać zasoby tych serwisów.<br />
<a href="http://gskinner.com/RegExr/">http://gskinner.com/RegExr/</a><br />
Świetne narzędzie ułatwiające pracę z mod_rewrite.<br />
<a href="http://www.logoinstant.com/" target="_blank">http://www.logoinstant.com/</a><br />
Darmowe wzory logo.<br />
<a href="http://code.msdn.microsoft.com/PowerCommands">http://code.msdn.microsoft.com/PowerCommands</a><br />
Przydatny dodatek do Visual Studio (za <a href="http://www.maciejaniserowicz.com/post/2009/08/31/Copypaste-reference-w-Visual-Studio.aspx" target="_blank">Procent</a>&#8216;em).<br />
<a href="http://blogs.msdn.com/danieb/archive/2009/08/26/pl-windows-7-search-connectors-czyli-integracja-wyszukiwania-z-systemem-operacyjnym.aspx" target="_blank">http://blogs.msdn.com/danieb/archive/2009/08/26/pl-windows-7-search-connectors-czyli-integracja-wyszukiwania-z-systemem-operacyjnym.aspx</a><br />
Opis jednej z nowych bardzo interesujących funkcjonalności w Windows 7.<br />
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=95E24C87-8732-48D5-8689-AB826E7B8FDF&amp;displaylang=en">Word viewer</a><br />
Programik pozwala na przeglądanie dokumentów Worda, bez potrzeby posiadania pakietu Office.<br />
<a href="http://www.hanselman.com/tools">http://www.hanselman.com/tools</a><br />
Naprawdę ogromna lista różnego rodzaju narzędzi, które przydadzą się każdemu, podzielona według kategorii. Sam się zdziwiłem, jak wiele przydatnych aplikacji jeszcze nie znałem.</p>
<p>Polecam również <a href="http://www.flickr.com/photos/gzlu/">galerię prac autora</a> zdjęcia, które reprezentuje ten wpis.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/warto-zobaczyc-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: Media Center &#8230;</title>
		<link>http://blog.poslinski.net/jquery-media-center/</link>
		<comments>http://blog.poslinski.net/jquery-media-center/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 11:23:55 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[projekty]]></category>
		<category><![CDATA[windows media center]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=302</guid>
		<description><![CDATA[Zainspirowany Windows Media Center, postanowiłem stworzyć coś podobnego w jQuery. Co z tego wyszło ? Przechwytywanie klawiszy Najważniejszą kwestią było przechwycenie klawiszy, używanych przez użytkowników. Aby to zrobić, wystarczyło podpiąć jQuery i napisać kilka prostych lini kodu: $(function(){ $('html').keyup(function(e) { alert(e.keyCode); }); }); Który, pozwolił, klikając na interesujące nas klawisze na poznanie kodu tych klawiszy. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-304" title="jquerycenter" src="http://blog.poslinski.net/wp-content/uploads/2009/08/jquerycenter.png" alt="jquerycenter" width="620" height="150" />Zainspirowany <strong>Windows Media Center</strong>, postanowiłem stworzyć coś podobnego w <strong>jQuery</strong>. Co z tego wyszło ?<br />
<span id="more-302"></span></p>
<h2>Przechwytywanie klawiszy</h2>
<p>Najważniejszą kwestią było przechwycenie klawiszy, używanych przez użytkowników. Aby to zrobić, wystarczyło podpiąć <strong>jQuery</strong> i napisać kilka prostych lini kodu:</p>
<pre name="code" class="javascript">$(function(){
 $('html').keyup(function(e) {
 alert(e.keyCode);
 });
});</pre>
<p>Który, pozwolił, klikając na interesujące nas klawisze na poznanie kodu tych klawiszy.</p>
<p>Na przykład, dla następującego kodu:</p>
<pre name="code" class="javascript">$('html').keyup(function(e) {
 if(e.keyCode == 13) {
 alert("Klawisz: Enter");
 }
});</pre>
<p>Wyświetli się komunikat &#8222;Klawisz: Enter&#8221;, <strong>po naciśnięciu </strong><strong>Entera</strong>. Należy pamiętać, o nieużywaniu klawiszy, które na stałe są skrótami samej przeglądarki (np. Backspace &#8211; powrót do poprzedniej strony).</p>
<p>To jedyne ograniczenie, jakie pojawia się w tym przypadku.</p>
<h2>Marginesy</h2>
<p>Następną kwestią, było obliczanie odpowiednich marginesów, ponieważ obrazki znajdują się w boxie z overflowem, konieczne było ustawianie odpowiedniego marginesu bocznego, na bazie szerokości obrazków. Trochę matematyki, niewiele filozofii.</p>
<h2>Demo</h2>
<p>Jak wygląda projekt na żywo, można zobaczyć w <a href="http://poslinski.net/strony/center/" target="_blank">wersji demo</a> (działa poprawnie pod najnowszymi wersjami: Internet Explorer / Chrome / Safari / FireFox /Opera ).</p>
<p>Zdaje sobie sprawę, że coś jeszcze można by dodać do tego projektu, zależało mi jednak na podstawowych funkcjonalnościach i w moim przekonaniu, zadanie to udało mi się zrealizować.</p>
<p>Z dedykacją dla Magdy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jquery-media-center/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Warto odwiedzić #2</title>
		<link>http://blog.poslinski.net/warto-odwiedzic-2/</link>
		<comments>http://blog.poslinski.net/warto-odwiedzic-2/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 08:37:30 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[konferencja]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[przeglądarki]]></category>
		<category><![CDATA[sfi]]></category>
		<category><![CDATA[szachy]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=136</guid>
		<description><![CDATA[Kolejna porcja linków, do ciekawych miejsc, które warto odwiedzić. Często rodzi się problem, testowania na różnych przeglądarkach witryny www, a szczególnie pod kątem Internet Explorer, rozwiązanie pokazane tutaj, pozwoli zainstalować na każdym komputerze nawet IE 3.0, co niestety w normalny sposób, nie jest możliwe. Jeżeli jednak, potrzebujemy sporadycznie sprawdzić jak wyświetla się strona, zachęcam ponownie [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-179" title="wartood2" src="http://blog.poslinski.net/wp-content/uploads/2009/04/wartood2.jpg" alt="wartood2" width="620" height="150" />Kolejna porcja linków, do ciekawych miejsc, które warto odwiedzić.</p>
<p><span id="more-136"></span>Często rodzi się problem, testowania na różnych przeglądarkach witryny www, a szczególnie pod kątem Internet Explorer, rozwiązanie pokazane <a href="http://tredosoft.com/Multiple_IE" target="_blank">tutaj</a>, pozwoli zainstalować na każdym komputerze nawet IE 3.0, co niestety w normalny sposób, nie jest możliwe.<br />
Jeżeli jednak, potrzebujemy sporadycznie sprawdzić jak wyświetla się strona, zachęcam ponownie do skorzystania z <a href="http://browsershots.org" target="_blank">http://browsershots.org</a> (które notabene, przeszło niedawno małą transformację).</p>
<p><a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf" target="_blank">Tworzenie strony www w oparciu o ASP.NET MVC</a> &#8211; Darmowy eBook (<a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" target="_blank">dodatkowe info</a>). Szczególnie przydatny teraz, gdy 1.0 ujrzało wreszcie światło dzienne. W dodatku źródła framework&#8217;a zostały otwarte.</p>
<p><a href="http://geekswithblogs.net/kobush/archive/2009/03/10/129993.aspx" target="_blank">Multi-Touch na Windows 7?</a> &#8211; Opis How-To + wideo.</p>
<p><a href="http://cendo.pl/sfi-roman-kluska-czynniki-sukcesu-w-biznesie/" target="_blank">Czynniki sukcesu w biznesie</a> &#8211; Autor wpisu opowiada o wrażeniach z wykładu Profesora Romana Kluski, na tegorocznym SFI.</p>
<p><a href="http://www.technonews.pl/Technonews/1,94439,6391460,Steve_Ballmer___tego_goscia_nie_da_sie_nie_lubic.html" target="_blank">Steve&#8217;a Ballmera nie da się nie lubić</a> &#8211; Słów kilka na temat obecnego CEO Microsoft&#8217;u  i nie tylko.</p>
<p><a href="http://majareq.viawww.pl/6-niezaprzeczalnie-wymiatajacych-narzedzi-webmastera-2/" target="_blank">6 niezaprzeczalnie wymiatających narzędzi webmastera</a> &#8211; Kilka bardzo interesujący rozwiązań bazujących na jQuery (dzięki <a href="http://bmedon.net" target="_blank">Bartek</a>).</p>
<p><a href="http://pclab.pl/art34801.html" target="_blank">Szachy i komputery</a> &#8211; Omówienie problemu przetwarzania ruchów przez komputer w szachach. Na szczególną uwagę zasługuje rozdział: <a href="http://pclab.pl/art34801-7.html" target="_blank">silne i słabe strony silników &#8211; przykłady</a>.</p>
<p><a href="http://ie6.pl/" target="_blank">ie6.pl</a> &#8211; Na koniec coś co pomoże programistom, ale i użytkownikom pracować wydajniej i bezpieczniej, czyli &#8222;odstaw Internet Explorer 6 do lamusa&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/warto-odwiedzic-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tworzenie wykresów na stronach internetowych</title>
		<link>http://blog.poslinski.net/tworzenie-wykresow-na-stronach-internetowych/</link>
		<comments>http://blog.poslinski.net/tworzenie-wykresow-na-stronach-internetowych/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 21:13:56 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[wykresy]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=128</guid>
		<description><![CDATA[Nic nie przemawia tak dobrze do człowieka, jak wszelkiego rodzaju wykresy. Coraz częściej zachodzi potrzeba prezentacji zbioru informacji w postaci graficznej. Istnieje wiele gotowych rozwiązań pozwalających je tworzyć, ja wybrałem kilka najbardziej interesujących z którymi warto się zapoznać. pChart Klasa napisana w PHP, o ogromnych możliwościach konfiguracji, generowanego przez nią wykresu. Szybka, prosta, dobrze udokumentowana [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.poslinski.net/wp-content/uploads/2009/02/charts.jpg"><img class="aligncenter size-full wp-image-129" title="Wykresy pChart" src="http://blog.poslinski.net/wp-content/uploads/2009/02/charts.jpg" alt="" width="620" height="195" /></a>Nic nie przemawia tak dobrze do człowieka, jak wszelkiego rodzaju wykresy. Coraz częściej zachodzi potrzeba prezentacji zbioru informacji w postaci graficznej. Istnieje wiele gotowych rozwiązań pozwalających je tworzyć, ja wybrałem kilka najbardziej interesujących z którymi warto się zapoznać.</p>
<p><span id="more-128"></span></p>
<h2>pChart</h2>
<p>Klasa napisana w <strong>PHP</strong>, o ogromnych możliwościach konfiguracji, generowanego przez nią wykresu. Szybka, prosta, dobrze udokumentowana i posiadająca wiele przykładów jej zastosowania, udostępnionych przez twórców. Wymaga uruchomionego <strong>GD</strong> na serwerze.</p>
<p><a href="http://pchart.sourceforge.net" target="_blank">http://pchart.sourceforge.net</a></p>
<h2>Open Flash Chart</h2>
<p>Wykres generowany za pomocą <strong>Flash&#8217;a</strong>, nie oferuje tak wielu możliwości, jeżeli chodzi o typy generowanych wykresów, ale konfiguracja jest również, wysoce dowolna.</p>
<p>Autorzy, jako główną zaletę tego rozwiązania, zachwalają możliwość pobierania informacji na podstawie których będzie generowany wykres, po załadowaniu strony do przeglądarki, zatem można generować różne wykresy dla różnych użytkowników. To zachęcające, ale nie będzie problemem, aby w konkurencyjnych rozwiązaniach osiągnąć podobny efekt.</p>
<p><a href="http://teethgrinder.co.uk/open-flash-chart/" target="_blank">http://teethgrinder.co.uk/open-flash-chart/</a></p>
<h2>jQchart</h2>
<p><strong>Plugin</strong> dla <strong>jQuery</strong>. Rozwiązanie proste i szybkie, zalecane, gdy chcemy wygenerować skromne wykresy na witrynach, już wykorzystujących <strong>jQuery</strong>. Podstawową wadą, jest język jego dokumentacji, ale obrazkowe omówienie i przykłady kodu, powinny nie sprawiać problemów z jego implementacją.</p>
<p><a href="http://jsgt.org/lib/jquery/plugin/jqchart/nightly/nightly.htm">http://jsgt.org/lib/jquery/plugin/jqchart/nightly/nightly.htm</a></p>
<h2>Google Visualisation API</h2>
<p>Dzięki temu kombajnowi, nie tylko można generować wykresy, ale również tworzyć wiele dodatkowych, bardzo interesujących rzeczy, takich jak mapy, sortowane tabele, a nawet bardzo proste schematy blokowe.</p>
<p>Jednym z jego elementów jest Google Chart API (<a href="http://code.google.com/intl/pl/apis/chart/" target="_blank">http://code.google.com/intl/pl/apis/chart/</a>), dzięki któremu można generować obrazy z wykresami, w dodatku w przydatku tego rozwiązania korzystamy z zasobów serwerowych Google, a nie własnych jak w przypadku poprzedników.</p>
<p><a href="http://code.google.com/intl/pl/apis/visualization/">http://code.google.com/intl/pl/apis/visualization/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/tworzenie-wykresow-na-stronach-internetowych/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>jQuery: Okno z potwierdzeniem</title>
		<link>http://blog.poslinski.net/jquery-okno-z-potwierdzeniem/</link>
		<comments>http://blog.poslinski.net/jquery-okno-z-potwierdzeniem/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 17:44:13 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[confirm]]></category>
		<category><![CDATA[gotowe rozwiązania]]></category>
		<category><![CDATA[potwierdzenie]]></category>
		<category><![CDATA[przykład]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=82</guid>
		<description><![CDATA[Pozostajemy przy tematyce praktycznych zastosowań jQuery. Potrzebowałem dzisiaj napisać okno potwierdzające jakąś operację w panelu administracyjnym. Sprawa wydaje się prosta i można by temat rozwiązać, zapominając o JavaScript ( Confirm ) albo PHP, ale zabawa polega na tym, jak to zrobić, żeby się nie narobić i jeszcze, żeby efekt był naprawdę przyzwoity? Postaram się przedstawić [...]]]></description>
			<content:encoded><![CDATA[<p>Pozostajemy przy tematyce praktycznych zastosowań <strong>jQuery</strong>. Potrzebowałem dzisiaj napisać okno potwierdzające jakąś operację w panelu administracyjnym. Sprawa wydaje się prosta i można by temat rozwiązać, zapominając o JavaScript ( Confirm ) albo PHP, ale zabawa polega na tym, jak to zrobić, żeby się nie narobić i jeszcze, żeby efekt był naprawdę przyzwoity?<br />
Postaram się przedstawić przykładowe rozwiązanie problemu, przy założeniu, że element, który chcemy, aby został opatrzony potwierdzeniem przez użytkownika, jest linkiem.<br />
<span id="more-82"></span></p>
<h2>1. Przykładowy plik HTML</h2>
<p>Rozpoczynamy od pliku, na którym będziemy wykonywać nasze nikczemne testy:</p>
<pre class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Okno z potwierdzeniem&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ultrices orci quis nisl. Aliquam at dolor. Sed consequat quam ac leo. Curabitur fringilla sodales sem. Praesent eleifend mauris ac ante dictum aliquet. Etiam sapien nulla, consequat eget, consequat vitae, molestie id, lectus. In hac habitasse platea dictumst. Aliquam feugiat odio ac lectus. Suspendisse egestas varius nisl. Morbi nulla. Pellentesque aliquet interdum felis. Vestibulum euismod luctus libero. Suspendisse sodales interdum enim. Pellentesque orci. Nullam massa nunc, eleifend vel, eleifend varius, congue eget, leo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;&lt;br/&gt;
Cras aliquet, ligula quis rutrum accumsan, lorem velit dignissim lorem, fermentum dignissim ligula quam at ligula. Nulla dictum interdum purus. Aenean odio. Vestibulum pretium. Phasellus enim enim, semper aliquet, tempus ac, rutrum gravida, libero. Etiam neque odio, blandit nec, suscipit vel, pellentesque scelerisque, leo. In id metus. Vivamus rutrum. Nullam nec velit. Ut purus nisi, porta at, tincidunt sit amet, scelerisque pulvinar, sem. Sed adipiscing risus. In nisi. In et augue. Phasellus ullamcorper urna quis lacus tempus dapibus. Sed eget est. Etiam tellus erat, adipiscing nec, placerat sed, ultricies a, orci. Cras ac lectus. Curabitur mattis lorem nec nibh. &lt;a href="http://poslinski.net" class="confirm"&gt;Maecenas&lt;/a&gt; aliquet iaculis turpis.
&lt;/p&gt;
&lt;div id="confirm"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Przykładowy tekst z generatora <a href="http://lipsum.org">Lorem ipsum</a>, trafił wewnątrz znacznika <strong>p</strong>. Zaraz przed zamknięciem znacznika <strong>body</strong>, umieściliśmy <strong>div#confirm</strong>, wewnątrz którego znajdować się będzie kod z naszym oknem do potwierdzania.</p>
<h2>2. Warstwa prezentacji</h2>
<p>Skupmy się na naszym oknie. W moim przypadku, jego kod html który będzie odpowiadał za całe okno, wyglądać będzie następująco:</p>
<pre class="html">&lt;div id="confirm"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;Czy na pewno chcesz usunąć ten element?&lt;/h1&gt;
&lt;p&gt;&lt;button onClick="location.href='TUTAJ TRAFIAĆ BĘDZIE ZAWARTOŚĆ POLA HREF Z LINKU'"&gt; TAK &lt;/button&gt; &lt;button&gt; NIE &lt;/button&gt;&lt;/p&gt;
&lt;/div&gt;&lt;!-- end #confirm div div --&gt;
&lt;/div&gt;&lt;!-- end #confirm div --&gt;
&lt;/div&gt;&lt;!-- end #confirm --&gt;</pre>
<p>Kod wewnątrz <strong>#confirm</strong>, wygenerowany zostanie przez <strong>JavaScript</strong>. Warto jednak zastanowić się, dlaczego wygląda właśnie tak i dlaczego znajduje się na samym dole kodu strony?</p>
<p>Zacznijmy od przyczyny umieszczenia kodu na końcu. Określając <strong>position: absolute</strong>, dla <strong>#confirm</strong>, bez parametru <strong>z-index</strong>, kolejność obiektów z <strong>position: absolute</strong>, będzie odpowiadać kolejności w jakiej zostaną wygenerowane przez przeglądarkę. Ostatnio wygenerowane, pojawią się <strong>najwyżej</strong> stosu warstw z <strong>position: absolute</strong>, zatem, jeśli będą miały np. takie same wymiary, zasłonią warstwy, które pojawiły się w kodzie wcześniej.</p>
<p>Dlaczego wewnątrz confirm, umieściliśmy 2 razy <strong>div</strong>? Do wyjaśnienia tej kwesti, wystarczy zapoznać się z fragmentem kodu css, który umieścimy wewnątrz sekcji head:</p>
<pre class="css">&lt;style type="text/css"&gt;
&lt;!--
* { margin: 0px; padding: 0px; }
body { margin: 10px; }
p { width: 600px; margin: 0 auto; line-height: 25px; }

/* CONFIRM */
#confirm { display: none; position: absolute; height: 100%; width: 100%; background: #000; top: 0; left: 0; }
#confirm { height: expression(((window.Enumerable &amp;&amp; window.Enumerable.max) ? [document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight].max() : document.documentElement.scrollHeight) + 'px' ); width: expression(((window.Enumerable &amp;&amp; window.Enumerable.max) ? [document.body.scrollWidth, document.documentElement.scrollWidth, document.body.offsetWidth, document.documentElement.clientHeight].max() : document.documentElement.scrollWidth) + 'px' );  }
#confirm[id] { position:fixed; }
#confirm div { padding: 10px; margin-top: 200px; }
#confirm div div { background: #900c0c; width: 500px; margin:0 auto; border: 1px solid #CCC; overflow: hidden; }
#confirm div div h1 { font-size: 18px; color: #FFF; }
#confirm div div p { padding: 20px; }
--&gt;
&lt;/style&gt;</pre>
<p><strong>#confirm</strong> określa tutaj tło, które będzie &#8222;przykrywać&#8221; całą stronę. Druga linijka, (ta z dziwnym height i width), konieczna jest w przypadku Internet Explorer. <strong>#confirm</strong>[id] zrozumiały jest tylko dla nowocześniejszych przeglądarek i takie było zamierzenie, aby tło naszego okna miało rozmiar 100% na 100% i przewijało się razem ze stroną ( dla IE jest obliczane każdorazowo na bazie aktualnej szerokości i wysokości okna ).</p>
<p>Pierwszy div jest konieczny, aby wyśrodkować 2gi oraz, aby zrobić odstęp od góry okna po przez <strong>margin-top</strong>. Drugi div określa już nasze okno do potwierdzania, które może zostać wyśrodkowane, ponieważ znajduje się wewnątrz elementu blokowego z <strong>width: 100%</strong> ( Standardowa wartość dla elementu z display: block &#8211; którym jest div )</p>
<h2>3. Czas na jQuery</h2>
<p>Teraz pozostaje nam odpowiednio zareagować na kliknięcie linka, który znajduje się pod koniec bloku <strong>p</strong>, w którym umieściliśmy lorem ipsum&#8217;a:</p>
<pre class="html">&lt;a href="http://poslinski.net" class="confirm"&gt;Maecenas&lt;/a&gt;</pre>
<p>W naszym przypadku, wszystkie linki z klasą <strong>confirm</strong>, będą reagowały na nasz skrypt. Możemy np. zastosować nasze potwierdzenie dla wszystkich linków, pozwalających na usuwanie jakiejś wartości z bazy danych.</p>
<p>Teraz wymagany kod <strong>JavaScript</strong>, który umieszczamy na dole strony:</p>
<pre class="javascript">&lt;script src="jquery.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$(document).ready(function(){
$(".confirm").click(function(){
$("#confirm")
.css({opacity:0.95})
.fadeIn()
.html('&lt;div&gt;&lt;div&gt;&lt;h1&gt;Przekierować?&lt;/h1&gt;&lt;p&gt;&lt;button onClick=\"location.href=\'' + $(this).attr("href") + '\'\"&gt; TAK &lt;/button&gt; &lt;button&gt; NIE &lt;/button&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;');
return false;
});
$("#confirm").click(function(){$(this).fadeOut();});
});
&lt;/script&gt;</pre>
<p>W pierwszej linii ładujemy <strong>jQuery</strong>.</p>
<p>Następnie, główna gałąź naszego kodu <strong>$(document).ready</strong>, uaktywnia nasz kod, po <strong>pełnym</strong> załadowaniu strony.</p>
<p>Reagujemy na kliknięcie w element z klasą <strong>confirm</strong>, wywołując w tym przypadku serie metod, na elemencie o <strong>id=confirm</strong>. Na początek, dodajemy przeźroczystość (element wciąż jednak ma ustawione <strong>display: none</strong>), następnie korzystając z metody <strong>fadeIn</strong>, <strong>jQuery</strong> płynnie przechodzi z <strong>display: none</strong> do <strong>opacity: 0.95</strong> ( w naszym przypadku ). Na koniec, wewnątrz elementu z <strong>#confirm</strong>, ładujemy kod html z naszymi dwoma divami, wewnątrz których umieszczamy nagłówek <strong>h1</strong> oraz dwa przyciski <strong>button</strong>. Jak pewnie, zauważyliścię, jeden z nich, dodatkowo posiada zadeklarowane zdarzenie <strong>onClick</strong>, które będzie reagować na pozytywne potwierdzenie użytkownika, przekierowywując go do miejsca, które wskazywał kliknięty link.</p>
<p>Dlaczego <strong>return false</strong> na końcu tego bloku kodu? Aby przeglądarka, nie przekierowywała nas automatycznie, po kliknięciu na link, nasza funkcja musi zwracać wartość false, w przeciwnym wypadku nastąpi przekierowanie i z okna potwierdzającego będą nici.</p>
<p>Jeżeli klikniemy gdziekolwiek indziej, niż w <strong>button</strong> z <strong>&#8222;TAK</strong>&#8222;, korzystając ze zdarzenia <strong>fadeOut()</strong>, płynnie zniknie blok z naszym potwierdzeniem, co realizuje <strong>$(&#8222;#confirm&#8221;).click( &#8230; )</strong>.</p>
<p>Całość napisanego kodu powinna wyglądać, mniej więcej tak:</p>
<pre class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Okno z potwierdzeniem&lt;/title&gt;
&lt;style type="text/css"&gt;
&lt;!--
* { margin: 0px; padding: 0px; }
body { margin: 10px; }
p { width: 600px; margin: 0 auto; line-height: 25px; }

/* CONFIRM */
#confirm { display: none; position: absolute; height: 100%; width: 100%; background: #000; top: 0; left: 0; }
#confirm { height: expression(((window.Enumerable &amp;&amp; window.Enumerable.max) ? [document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight].max() : document.documentElement.scrollHeight) + 'px' ); width: expression(((window.Enumerable &amp;&amp; window.Enumerable.max) ? [document.body.scrollWidth, document.documentElement.scrollWidth, document.body.offsetWidth, document.documentElement.clientHeight].max() : document.documentElement.scrollWidth) + 'px' );  }
#confirm[id] { position:fixed; }
#confirm div { padding: 10px; margin-top: 200px; }
#confirm div div { background: #900c0c; width: 500px; margin:0 auto; border: 1px solid #CCC; overflow: hidden; }
#confirm div div h1 { font-size: 18px; color: #FFF; }
#confirm div div p { padding: 20px; }
--&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ultrices orci quis nisl. Aliquam at dolor. Sed consequat quam ac leo. Curabitur fringilla sodales sem. Praesent eleifend mauris ac ante dictum aliquet. Etiam sapien nulla, consequat eget, consequat vitae, molestie id, lectus. In hac habitasse platea dictumst. Aliquam feugiat odio ac lectus. Suspendisse egestas varius nisl. Morbi nulla. Pellentesque aliquet interdum felis. Vestibulum euismod luctus libero. Suspendisse sodales interdum enim. Pellentesque orci. Nullam massa nunc, eleifend vel, eleifend varius, congue eget, leo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;&lt;br/&gt;
Cras aliquet, ligula quis rutrum accumsan, lorem velit dignissim lorem, fermentum dignissim ligula quam at ligula. Nulla dictum interdum purus. Aenean odio. Vestibulum pretium. Phasellus enim enim, semper aliquet, tempus ac, rutrum gravida, libero. Etiam neque odio, blandit nec, suscipit vel, pellentesque scelerisque, leo. In id metus. Vivamus rutrum. Nullam nec velit. Ut purus nisi, porta at, tincidunt sit amet, scelerisque pulvinar, sem. Sed adipiscing risus. In nisi. In et augue. Phasellus ullamcorper urna quis lacus tempus dapibus. Sed eget est. Etiam tellus erat, adipiscing nec, placerat sed, ultricies a, orci. Cras ac lectus. Curabitur mattis lorem nec nibh. &lt;a href="http://poslinski.net" class="confirm"&gt;Maecenas&lt;/a&gt; aliquet iaculis turpis.
&lt;/p&gt;
&lt;div id="confirm"&gt;&lt;/div&gt;
&lt;script src="jquery.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$(document).ready(function(){
$(".confirm").click(function(){
$("#confirm")
.css({opacity:0.95})
.fadeIn()
.html('&lt;div&gt;&lt;div&gt;&lt;h1&gt;Przekierować?&lt;/h1&gt;&lt;p&gt;&lt;button onClick=\"location.href=\'' + $(this).attr("href") + '\'\"&gt; TAK &lt;/button&gt; &lt;button&gt; NIE &lt;/button&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;');
return false;
});
$("#confirm").click(function(){$(this).fadeOut();});
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h2>Podsumowanie</h2>
<p>Działający przykład, można zobaczyć <a href="http://blog.poslinski.net/examples/2.html" target="_blank">tutaj</a>.</p>
<p>To przykładowe rozwiązanie, nie zakłada wszystkich możliwości. Możemy kod rozbudować tak, aby potwierdzenie działało także dla formularzy, należało by wtedy sterować wysyłaniem formularza, co również możemy dokonać z poziomu <strong>jQuery.</strong> Można również, na bazie powyższego kodu stworzyć plugin do jQuery. Zapraszam do dyskusji w komentarzach do tego postu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jquery-okno-z-potwierdzeniem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: find()</title>
		<link>http://blog.poslinski.net/jquery-find/</link>
		<comments>http://blog.poslinski.net/jquery-find/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 19:03:27 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[przeglądarki]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=35</guid>
		<description><![CDATA[jQuery to świetny framework JavaScript. Jeżeli jeszcze nie mieliście okazji z nim pracować, mam nadzieje, że poniższa publikacja, zachęci Was, do skorzystania z tego właśnie rozwiązania. Cechuje go bowiem szybkość, optymalizacja kodu, mająca na celu dostosowanie go pod jak największą liczbę przeglądarek, a także, co pewnie wielu zainteresuje najbardziej &#8211; prostota tworzenia złożonych rozwiązań. W [...]]]></description>
			<content:encoded><![CDATA[<p><strong>jQuery</strong> to świetny <strong>framework JavaScript</strong>. Jeżeli jeszcze nie mieliście okazji z nim pracować, mam nadzieje, że poniższa publikacja, zachęci Was, do skorzystania z tego właśnie rozwiązania. Cechuje go bowiem szybkość, optymalizacja kodu, mająca na celu dostosowanie go pod jak największą liczbę przeglądarek, a także, co pewnie wielu zainteresuje najbardziej &#8211; prostota tworzenia złożonych rozwiązań.</p>
<p>W dzisiejszym artykule skupimy się na bardzo przydatnej metodzie <strong>find()</strong>.</p>
<p><span id="more-35"></span>Jeżeli nie miałeś wcześniej do czynienia z tym <strong>frameworkiem</strong>, zachęcam do zapoznania się z podstawami selektorów, korzystając z <a href="http://docs.jquery.com/Selectors">oficjalnego API na temat selectorów</a>, lub też z przygotowanego przez Bartosza Medonia <a href="http://www.soundpage.info/kurs_javascript/kurs/63jQuery_pokaz_ukryj.html">kursu podstaw jQuery</a>. Ta wiedza znacznie ułatwi pojmowanie zamieszczonych tutaj rozwiązań.</p>
<p>Najlepiej zajmijmy się jakimś konkretnym przykładem zastosowania tej metody. Na większości stron, jednym z podstawowych elementów służących do nawigacji jest menu. Spróbujemy stworzyć własne animowane menu, korzystając z minimalnej ilości elementów i działające pod każdą przeglądarka obsługującą JavaScript.</p>
<h2>1. Przygotowanie elementów</h2>
<p>Zacznijmy od stworzenia pustego dokumentu html:</p>
<pre name="code" class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Menu&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Następnie pobieramy najnowszą wersję <strong>jQuery</strong> z <a href="http://jquery.com">oficjalnej strony projektu</a> ( production ) i kopiujemy do folderu z naszym plikiem html.</p>
<p>Wewnątrz tego dokumentu, przydałaby się jakaś przykładowa treść, oraz nasze menu. Wykorzystajmy do tego tagi<strong> div</strong> oraz <strong>span</strong>. Oczywiście pozycje w naszym menu, powinny być linkami, zatem umieścimy je w bloku <strong>a</strong>. Całość umieścimy wewnątrz bloku <strong>div</strong> o id=<strong>menu</strong>. Dodany również plik z jQuery wykorzystując tag <strong>script</strong>. Całość powinna wyglądać mniej więcej tak:</p>
<pre name="code" class="html">&lt;div id="menu"&gt;
&lt;div&gt;
&lt;a href="#"&gt;#1 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#1.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#1.2 Menu&lt;/a&gt;
&lt;a href="#"&gt;#1.3 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href="#"&gt;#2 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#2.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.2 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.3 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.4 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.5 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href="#"&gt;#3 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#3.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#3.2 Menu&lt;/a&gt;
&lt;a href="#"&gt;#3.3 Menu&lt;/a&gt;
&lt;a href="#"&gt;#3.4 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href="#"&gt;#4 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#4.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#4.2 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end #menu --&gt;
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;</pre>
<p>Specjalnie umieściłem wiele pozycji w menu, aby pokazać jak łatwym, będzie odwołanie się do wielu z nich z poziomu <strong>jQuery</strong>, w zależności od tego, na który blok najedziemy myszką.</p>
<h2>2. Zdefiniowanie wyglądu menu (css)</h2>
<p>W tym dziale, zdefiniujemy wygląd wykorzystanych w pliku html, bloków kodu. Ja przygotowałem sobie, następujący fragment kodu ze stylem, umieszczony w sekcji head:</p>
<pre name="code" class="css">&lt;style type="text/css"&gt;
&lt;!--
* { margin: 0px; padding: 0px; }
a { text-decoration: none; font: 20px Georgia, "Times New Roman", Times, serif; }
html, body { margin: 10px; }

#menu { top: 0px; float: left; width: 100%; }
#menu div { position: relative; float: left; }
#menu div a:active, #menu div a:link, #menu div a:visited { display: block; position: relative; vertical-align: middle; background: #ccc; color: #fff; padding: 5px 10px; width: 150px; }
#menu div a:hover { background: #999; }
#menu div span { display: none;  position: absolute; top: 100%; left: 0; float: none; }
#menu div span a:active, #menu div span a:link, #menu div span a:visited { position: relative; display: block; float: left; top: 0px; background: #ddd; color: #fff; padding: 5px 10px; width: 150px; }
#menu div span a:hover { background: #999; }
--&gt;
&lt;/style&gt;</pre>
<p>W naszym przykładzie tworzymy tylko proste dwupoziomowe menu, ale nic nie stoi na przeszkodzie, aby zmodyfikować je i dostosować do dowolnej ilości poziomów.</p>
<p>Jeśli już jesteśmy przy tej kwestii, warto również zapoznać się z <a href="http://lwis.net/free-css-drop-down-menu/">frameworkiem do tworzenia css&#8217;owego menu</a>.</p>
<h2>3. Gwóźdź programu &#8211; find.</h2>
<p>Tym oto sposobem, mamy przygotowaną całą stronę do implementacji kodu <strong>JavaScript</strong>. Wiemy także, o czym mowa, mówiąc selektor. W naszym przypadku, przykład jest dość prosty, albowiem mamy tylko 4 menu główne, ale nie trudno sobie wyobrazić, iż może być ich więcej, a każde z nich może mieć wiele rozgałęzień. To dyskwalifikuje metodę pętli, również wyklucza metodę <strong>brute-force</strong>, uwzględniającą przeanalizowanie wszystkich przypadków osobno. Jednak dzięki metodzie <strong>find</strong>, problem sprowadza się do jednej, bardzo czytelnej lini kodu, która zrealizuje za nas całe zadanie. Dobrze jest, aby nasz kod JavaScript znajdował się w <strong>$(document).ready</strong>, co zagwarantuje nam, odwoływanie się do niego, dopiero po załadowaniu strony, wszystkich zewnętrznych skryptów, stylów i innych plików.</p>
<pre name="code" class="javascript">&lt;script type="text/javascript"&gt;
&lt;!--
// &lt;![CDATA[
$(document).ready(function(){
	$("#menu div").hover(
		function() {
			$(this).find("span").css({opacity:0.98}).slideToggle("fast");
		},
		function() {
			$(this).find("span").slideToggle("fast");
		}
	);
});
// ]]&gt;
--&gt;
&lt;/script&gt;</pre>
<p>Powyższy kod zalecam umieścić po znaczniku <strong>script</strong>, w którym odwołujemy się do <strong>jQuery</strong>, na dole strony.</p>
<p>W głównym selektorze, odwołujemy się do znacznika od <strong>id=&#8221;menu&#8221;</strong>, <strong>wewnątrz</strong> którego znajduje się znacznik <strong>div</strong>. Metoda <strong>.hover()</strong>, oznacza zdarzenie najechania myszki, na wybrany element i jako parametry, przyjmuje jedną lub 2 funkcje, które są realizowane podczas zainicjowania tego zdarzenia. Druga funkcja jest opcjonalna i jest wykonywana wówczas, gdy opuścimy kursorem obszar naszego elementu. Postarałem się tak przedstawić kod, aby obie funkcje były przejrzyste dla czytelnika, ale zalecam minimalizację kodu w funkcjonujących projektach.</p>
<p>Przeanalizujmy teraz kod wewnątrz funkcji. Znowu wykorzystujemy tutaj selektor, tym razem odwołujemy się od obiektu, w którym się znajdujemy. <strong>Każdy selektor jQuery zwraca obiekt</strong>, do którego możemy się odnieść przez klauzulę <strong>this</strong>. Jednak jeśli chcemy, wewnątrz elementu, odnieść się do elementu znajdującego się wewnątrz danego elementu, wykorzystujemy metodę find, która wyszukuje i zwraca <strong>wszystkie</strong> pasujące elementy. Należy o tym pamiętać, ponieważ jeśli chcemy odnieść się do jakiegoś konkretnego elementu, należało by zastosować na przykład klasę i odwołać się po przez <strong>.find(&#8222;.classNazwa&#8221;)</strong>. Oczywiście, wewnątrz find, możemy również odnosić się do bardziej skomplikowanej struktury elementów, tak samo jak w selektorach jQuery.</p>
<p>Pierwsza funkcja jak widać, modyfikuje zwracany przez metodę <strong>find</strong> obiekt, i zmienia jego przeźroczystość, następnie, korzystając z metody <strong>slideToggle()</strong>, zainicjowana zostaje animacja, w tym przypadku, jest to animacja &#8222;zjeżdżania&#8221; na dół, o czym decyduje parametr <strong>display</strong> ustawiony na <strong>none</strong> w ustawieniach css elementu ( element jest niewidoczny, więc slide jedyne co może wykonać to pokazanie go ).</p>
<p>W przypadku drugiej funkcji, wszystko wygląda bardzo podobnie, z tą różnicą, że nie musimy już modyfikować opacity, albowiem zostało ono już zmienione. Zrobiliśmy to po przez jQuery, m.in. dlatego, ponieważ w css, nie było by to możliwe, w taki sposób, aby uzyskać pełną zgodność z <strong>validatorem w3c</strong>, a także, aby przeźroczystość wyświetlana była prawidłowo, na wszystkich nowoczesnych przeglądarkach obsługujących JavaScript.</p>
<h2>4. Podsumowanie</h2>
<p>Celem tego artykułu, nie było nauczenie się tworzenia animowanego menu, lecz, poznanie wielu ciekawych kwestii dotyczących metody <strong>find()</strong>, a także samego <strong>jQuery</strong>. Możliwości jakie niesie, są ogromne i mam nadzieje, że po lekturze tego artykułu, zyska ono kilku entuzjastów.</p>
<p>Natomiast efekt naszej pracy, możemy zobaczyć w <a href="http://blog.poslinski.net/examples/1.html" target="_blank">demonstracji</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jquery-find/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

