<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Чудо{вищные} заметки</provider_name><provider_url>https://miracle.rpz.name</provider_url><author_name>MiRacLe</author_name><author_url>https://miracle.rpz.name/author/miracle/</author_url><title>jQuery.facts</title><html>Расскажу несколько фактов о  jQuery, которые как мне видится, не очень понимают &lt;a href=&quot;http://community.livejournal.com/ru_webdev/&quot;&gt;&quot;отечественные программеры&quot;&lt;/a&gt;
&lt;ul&gt;
	&lt;li&gt; при &quot;навешивании&quot; обработчика какого-либо event-а к (например $(&#039;#element&#039;).click(handler); ) он НЕ заменяет предыдущий обработчик (если таковой имелся), т.е. код:
&lt;pre class=&quot;js:nocontrols&quot;&gt;
$(&#039;#element&#039;).click(function(){  alert(&#039;hello&#039;);})
$(&#039;#element&#039;).click(function(){  alert(&#039;world&#039;); })
&lt;/pre&gt;
Выведет оба alert-а, а не только второй как думается некоторым.&lt;/li&gt;
	&lt;li&gt; Непосредственно из первого вытекает следующий факт - конструкций $(document).ready(blablabla); в коде может быть &quot;бесчисленное&quot; количество раз - все обработчики вызовутся в порядке их добавления.&lt;/li&gt;
	&lt;li&gt;Система событий в jQuery позволяет не ограничиваться теми событиями, которые есть в документации - можно создавать события  самостоятельно:
&lt;pre class=&quot;js:nocontrols&quot;&gt;
$(&#039;button&#039;).click(function(){ jQuery.event.trigger(&quot;buttonClicked&quot;);});
$(&#039;div&#039;).bind(&#039;buttonClicked&#039;,function(){ $(this).hide();});
$(&#039;span&#039;).bind(&#039;buttonClicked&#039;,function(){ $(this).show();});
&lt;/pre&gt;
Подобная техника позволяет существенно упростить код и сделать его &quot;читабельнее&quot;.&lt;/li&gt;
	&lt;li&gt;Анимационные эффекты в jQuery асинхронны и нередко возникает вопрос - как одну функцию выполнить строго после завершения первой. Все core-функции jQuery связанные с эффектами в качестве последнего параметра принимают callback - функцию, которая вызовется по завершению текущего эффекта:
&lt;pre class=&quot;js:nocontrols&quot;&gt;
$(&#039;element-1&#039;).fadeOut(3000,function(){
      $(&#039;element-2&#039;).fadeIn(1500,function() {
      alert(&#039;done second effect&#039;);
   });
});
&lt;/pre&gt;
&lt;/li&gt;
	&lt;li&gt;К ЛЮБОМУ html-элементу можно добавить ЛЮБОЙ атрибут (&lt;span myownattr=&quot;somevalue&quot; /&gt;). По этим &quot;самодельным&quot; атрибутам элементы можно найти с помощью селекторов jQuery:
&lt;pre class=&quot;js:nocontrols&quot;&gt;
var elements_by_attr = $(&#039;[@myownattr]&#039;);
var elements_by_attr_with_value = $(&#039;[@myownattr=&quot;somevalue&quot;]&#039;);
var spans_by_attr = $(&#039;span[@myownattr]&#039;);
&lt;/pre&gt;
Очень полезное &quot;явление&quot; при создании своих собственных элементов управления (и не только).&lt;/li&gt;
&lt;/ul&gt;
Ну и напоследок подкину найденную статейку  &lt;a href=&quot;http://simonwillison.net/2007/Aug/15/jquery/&quot;&gt;&quot;jQuery for JavaScript programmers&quot;&lt;/a&gt;, прочитать которую стоит тем, кто только начинает осваивать прелести &lt;a href=&quot;http://jquery.com&quot;&gt;jQuery&lt;/a&gt; . Материал изложен на английском.</html><type>rich</type></oembed>