<?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>jQuery и другое... &#187; UI</title>
	<atom:link href="http://www.linkexchanger.su/tag/ui/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linkexchanger.su</link>
	<description>css, html, php, javascript, jQuery, ajax ... - решения, примеры, рецепты</description>
	<lastBuildDate>Sun, 08 Jan 2012 13:25:49 +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>jQuery. Сборник рецептов (+ CD-ROM)</title>
		<link>http://www.linkexchanger.su/2011/842.html</link>
		<comments>http://www.linkexchanger.su/2011/842.html#comments</comments>
		<pubDate>Tue, 02 Aug 2011 09:21:13 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery документация]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[документация jQuery]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/?p=842</guid>
		<description><![CDATA[В августе в интернет-магазинах должна появиться в продаже книга jQuery. Сборник рецептов (+ CD-ROM). Это второе издание книги, которая вышла в издательстве &#171;БХВ-Петербург&#187; чуть более года назад. Второе издание дорабатывалось мной с учетом замечаний и пожеланий читателей и вновь появившихся возможностей.

Геннадий Самков
jQuery. Сборник рецептов (+ CD-ROM)
Издательство: БХВ-Петербург, 2011 г.
Мягкая обложка, 416 стр.
ISBN 978-5-9775-0732-5
Тираж: 1500 экз.
Формат: [...]]]></description>
			<content:encoded><![CDATA[<p>В августе в интернет-магазинах должна появиться в продаже книга <strong>jQuery. Сборник рецептов (+ CD-ROM)</strong>. Это <strong>второе издание</strong> книги, которая вышла в издательстве &laquo;БХВ-Петербург&raquo; чуть более года назад. Второе издание дорабатывалось мной с учетом замечаний и пожеланий читателей и вновь появившихся возможностей.</p>
<ul style="float: right; width: 200px">
<li>Геннадий Самков</li>
<li>jQuery. Сборник рецептов (+ CD-ROM)</li>
<li>Издательство: БХВ-Петербург, 2011 г.</li>
<li>Мягкая обложка, 416 стр.</li>
<li>ISBN 978-5-9775-0732-5</li>
<li>Тираж: 1500 экз.</li>
<li>Формат: 70&#215;100/16</li>
</ul>
<p><a href="http://www.ozon.ru/context/detail/id/6843919/?partner=lexsu&#038;from=bar" title="jQuery. Сборник рецептов" target="_blank"><img style="border:1px solid #333;" src="http://www.linkexchanger.su/wp-content/uploads/2011/07/jquery2.jpg" alt="jQuery. Сборник рецептов" /></a><span id="more-842"></span></p>
<p><strong>Аннотация:</strong><br />
Книга является сборником решений наиболее часто встречающихся задач при веб-программировании пользовательских интерфейсов с использованием библиотеки jQuery. Рассмотрены практически все методы и вспомогательные функции jQuery, в том числе обеспечивающие взаимодействие jQuery и AJAX. Подробно рассказано о надстройке UI jQuery. Приведено большое количество примеров использования плагинов для jQuery &#8211; создание графиков и диаграмм, фотогалерей, меню, работа с таймерами и cookies, обработка табличных данных и др. Во втором издании в примерах используется библиотека jQuery версий 1.4.4 и 1.5.2, а также надстройка UI jQuery 1.8.9.<br />
Компакт-диск содержит примеры из книги, файлы библиотеки jQuery 1.4.4 и 1.5.2, файлы надстройки UI jQuery 1.8.9, а также файлы расширений сторонних разработчиков.</p>
<p>От себя могу добавить, что книга написана в таком же духе, как и <a href="http://www.linkexchanger.su/2010/115.html">первое издание</a>, т.е. примеры, примеры и еще раз примеры плюс подробные разъяснения&#8230;.</p>
<p><a target="_blank" href="http://mmedia.ozon.ru/multimedia/book_file/1003104287.pdf">Отрывок книги в PDF</a></p>
<p><strong>Полное содержание:</strong></p>
<table border="0" width="100%">
<tr>
<td>Введение</td>
<td>7</td>
</tr>
<tr>
<td>Структура книги</td>
<td>7</td>
</tr>
<tr>
<td>Как работать с книгой</td>
<td>8</td>
</tr>
<tr>
<td>Источники информации</td>
<td>9</td>
</tr>
<tr>
<td>Благодарности</td>
<td>10</td>
</tr>
<tr>
<td>
<h3>ЧАСТЬ I. МЕТОДЫ БИБЛИОТЕКИ JQUERY</h3>
</td>
<td>11</td>
</tr>
<tr>
<td>
<h3>Глава 1. Выбор элементов</h3>
</td>
<td>13</td>
</tr>
<tr>
<td>1.1. Базовые правила</td>
<td>13</td>
</tr>
<tr>
<td>1.2. Выбор элементов с учетом иерархии</td>
<td>20</td>
</tr>
<tr>
<td>1.3. Основные фильтры</td>
<td>24</td>
</tr>
<tr>
<td>1.4. Фильтрация по содержимому</td>
<td>30</td>
</tr>
<tr>
<td>1.5. Фильтры видимых и невидимых элементов</td>
<td>34</td>
</tr>
<tr>
<td>1.6. Селекторы атрибутов</td>
<td>36</td>
</tr>
<tr>
<td>1.7. Фильтры элементов форм</td>
<td>40</td>
</tr>
<tr>
<td>1.8. Фильтры состояния элементов форм</td>
<td>43</td>
</tr>
<tr>
<td>1.9. Фильтры элементов-потомков</td>
<td>47</td>
</tr>
<tr>
<td>
<h3>Глава 2. Атрибуты элементов</h3>
</td>
<td>53</td>
</tr>
<tr>
<td>2.1. Управление атрибутами элементов</td>
<td>53</td>
</tr>
<tr>
<td>2.2. Работа с атрибутом class</td>
<td>57</td>
</tr>
<tr>
<td>2.3. Работа с HTML и текстом</td>
<td>59</td>
</tr>
<tr>
<td>2.4. Работа с атрибутом value</td>
<td>61</td>
</tr>
<tr>
<td>
<h3>Глава 3. Визуальные эффекты</h3>
</td>
<td>67</td>
</tr>
<tr>
<td>3.1. Как показывать и скрывать элементы</td>
<td>67</td>
</tr>
<tr>
<td>3.2. Эффекты &laquo;скольжения&raquo; и &laquo;затухания&raquo;</td>
<td>70</td>
</tr>
<tr>
<td>3.3. Создание анимации</td>
<td>74</td>
</tr>
<tr>
<td>3.4. Эффекты UI jQuery</td>
<td>79</td>
</tr>
<tr>
<td>
<h3>Глава 4. Работа с CSS-свойствами</h3>
</td>
<td>84</td>
</tr>
<tr>
<td>4.1. Как получать и устанавливать значения CSS-свойств элементов</td>
<td>84</td>
</tr>
<tr>
<td>4.2. Ширина и высота элементов</td>
<td>88</td>
</tr>
<tr>
<td>4.3. Позиционирование элементов</td>
<td>90</td>
</tr>
<tr>
<td>
<h3>Глава 5. Работа с данными в jQuery</h3>
</td>
<td>94</td>
</tr>
<tr>
<td>5.1. Сохранение и извлечение данных</td>
<td>94</td>
</tr>
<tr>
<td>
<h3>Глава 6. Манипуляции над элементами</h3>
</td>
<td>98</td>
</tr>
<tr>
<td>6.1. Изменение содержимого элементов</td>
<td>98</td>
</tr>
<tr>
<td>6.2. Как вставлять элементы в DOM</td>
<td>101</td>
</tr>
<tr>
<td>6.3. Замена, удаление и копирование элементов</td>
<td>111</td>
</tr>
<tr>
<td>
<h3>Глава 7. Перемещение по элементам</h3>
</td>
<td>118</td>
</tr>
<tr>
<td>7.1. Поиск нужных элементов в DOM</td>
<td>118</td>
</tr>
<tr>
<td>7.2. Фильтрация элементов набора</td>
<td>128</td>
</tr>
<tr>
<td>7.3. Прочие методы</td>
<td>138</td>
</tr>
<tr>
<td>
<h3>Глава 8. События и их обработка</h3>
</td>
<td>144</td>
</tr>
<tr>
<td>8.1. События документа</td>
<td>144</td>
</tr>
<tr>
<td>8.2. Назначение, удаление и вызов событий</td>
<td>146</td>
</tr>
<tr>
<td>8.3. События мыши, клавиатуры, браузера и форм</td>
<td>156</td>
</tr>
<tr>
<td>
<h3>Глава 9. Взаимодействие jQuery и AJAX</h3>
</td>
<td>165</td>
</tr>
<tr>
<td>9.1. Сокращенные методы</td>
<td>165</td>
</tr>
<tr>
<td>9.2. Вспомогательные функции $.ajax() и $ajaxSetup()</td>
<td>178</td>
</tr>
<tr>
<td>9.3. События AJAX</td>
<td>187</td>
</tr>
<tr>
<td>9.4. Полезные вспомогательные функции</td>
<td>192</td>
</tr>
<tr>
<td>
<h3>Глава 10. Полезные вспомогательные функции и методы jQuery</h3>
</td>
<td>195</td>
</tr>
<tr>
<td>10.1. Некоторые операции с массивами и объектами в jQuery</td>
<td>195</td>
</tr>
<tr>
<td>10.2. Некоторые операции с наборами элементов в jQuery</td>
<td>208</td>
</tr>
<tr>
<td>10.3. Другие полезные вспомогательные функции</td>
<td>214</td>
</tr>
<tr>
<td>
<h3>ЧАСТЬ II. РАСШИРЕНИЯ ДЛЯ БИБЛИОТЕКИ JQUERY</h3>
</td>
<td>219</td>
</tr>
<tr>
<td>
<h3>Глава 11. Меню для веб-сайта</h3>
</td>
<td>221</td>
</tr>
<tr>
<td>11.1. Плагин jQuery Superfish</td>
<td>221</td>
</tr>
<tr>
<td>
<h3>Глава 12. Работа с таблицами</h3>
</td>
<td>230</td>
</tr>
<tr>
<td>12.1. Плагин jqGrid</td>
<td>230</td>
</tr>
<tr>
<td>
<h3>Глава 13. Графики и диаграммы</h3>
</td>
<td>250</td>
</tr>
<tr>
<td>13.1. Плагин jqPlot</td>
<td>250</td>
</tr>
<tr>
<td>
<h3>Глава 14. AJAX-формы</h3>
</td>
<td>262</td>
</tr>
<tr>
<td>14.1. Плагин jQuery Form</td>
<td>262</td>
</tr>
<tr>
<td>14.2. Плагин jQuery Validate</td>
<td>267</td>
</tr>
<tr>
<td>14.3. Плагин jQuery Uploadify</td>
<td>273</td>
</tr>
<tr>
<td>
<h3>Глава 15. Фотогалерея для сайта</h3>
</td>
<td>282</td>
</tr>
<tr>
<td>15.1. Фотогалерея FancyBox</td>
<td>282</td>
</tr>
<tr>
<td>
<h3>Глава 16. Несколько полезных плагинов</h3>
</td>
<td>297</td>
</tr>
<tr>
<td>16.1. jQuery Cookie</td>
<td>297</td>
</tr>
<tr>
<td>16.2. jQuery Timers</td>
<td>299</td>
</tr>
<tr>
<td>16.3. jQuery Cluetip</td>
<td>302</td>
</tr>
<tr>
<td>
<h3>Глава 17. UI jQuery — виджеты</h3>
</td>
<td>308</td>
</tr>
<tr>
<td>17.1. Виджет Accordion</td>
<td>308</td>
</tr>
<tr>
<td>17.2. Виджет Datepicker</td>
<td>318</td>
</tr>
<tr>
<td>17.3. Виджет Dialog</td>
<td>329</td>
</tr>
<tr>
<td>17.4. Виджет Progressbar</td>
<td>337</td>
</tr>
<tr>
<td>17.5. Виджет Slider</td>
<td>340</td>
</tr>
<tr>
<td>17.6. Виджет Tabs</td>
<td>346</td>
</tr>
<tr>
<td>17.7. Виджет Button</td>
<td>356</td>
</tr>
<tr>
<td>17.8. Виджет Autocomplete</td>
<td>361</td>
</tr>
<tr>
<td>
<h3>Глава 18. UI jQuery — взаимодействие с элементами страницы</h3>
</td>
<td>370</td>
</tr>
<tr>
<td>18.1. Draggable — перемещение элементов</td>
<td>370</td>
</tr>
<tr>
<td>18.2. Droppable — &laquo;сброс&raquo; элементов</td>
<td>379</td>
</tr>
<tr>
<td>18.3. Resizable — изменение размеров элементов</td>
<td>386</td>
</tr>
<tr>
<td>18.4. Selectable — выбор элементов</td>
<td>392</td>
</tr>
<tr>
<td>18.5. Sortable — сортировка элементов</td>
<td>399</td>
</tr>
<tr>
<td>Приложение. Описание компакт-диска</td>
<td>409</td>
</tr>
<tr>
<td>Литература</td>
<td>411</td>
</tr>
<tr>
<td>Предметный указатель</td>
<td>412</td>
</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2011/842.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>jQuery UI – плагин Autocomplete</title>
		<link>http://www.linkexchanger.su/2011/700.html</link>
		<comments>http://www.linkexchanger.su/2011/700.html#comments</comments>
		<pubDate>Mon, 04 Apr 2011 11:22:46 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/?p=700</guid>
		<description><![CDATA[Очень давно не писал ничего в блоге и вот наконец выбрал немного времени, чтобы рассказать о виджете Autocomplete, который был включен в состав jQuery UI – надстройки над JavaScript-библиотекой jQuery.

Виджет Autocomplete помогает организовать список подходящих значений при заполнении пользователем поля ввода.
Для начала посетим страницу настраиваемой закачки на сайте jQuery UI, чтобы получить необходимые нам файлы. [...]]]></description>
			<content:encoded><![CDATA[<p>Очень давно не писал ничего в блоге и вот наконец выбрал немного времени, чтобы рассказать о виджете Autocomplete, который был включен в состав jQuery UI – надстройки над JavaScript-библиотекой jQuery.</p>
<p><img src="http://www.linkexchanger.su/wp-content/uploads/2011/04/autocomplete.jpg" alt="UI jQuery - виджет Autocomplete" /></p>
<p>Виджет Autocomplete помогает организовать список подходящих значений при заполнении пользователем поля ввода.</p>
<p><span id="more-700"></span>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке Deselect all component, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется – отмечаем чекбокс Autocomplete и видим, что вместе с ним отметились чекбоксы Core, Widget и Position. Работа виджета Autocomplete зависит от этих файлов.</p>
<p>Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку Download и получаем архив. Возможности виджета можно оценить в <a href="http://jqueryui.com/demos/autocomplete/">демо-галерее</a> на сайте разработчика. Я лишь постараюсь по-русски и как можно более простым языком объяснить, как заставить все это работать.</p>
<p>Итак, сначала в разделе HEAD потребуется подключить несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/ui-lightness/jquery-ui-1.8.9.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.4.4.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.8.9.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Сначала мы подключили файл стилевого оформления виджета, затем файл библиотеки jQuery. Третий подключенный файл необходим, чтобы реализовать Autocomplete.</p>
<p>Виджет Autocomplete не требует сложной HTML-разметки. Достаточно всего лишь поля для ввода текста, т.е. обычного элемента input, который имеет значение text в атрибуте type. Дополнительную разметку можно добавить, чтобы использовать стили в соответствии с выбранной темой оформления.</p>
<pre class="brush: xml;">&lt;div class=&quot;ui-widget&quot;&gt;
	&lt;label for=&quot;tags&quot;&gt;Tags: &lt;/label&gt;
	&lt;input id=&quot;tags&quot; type=&quot;text&quot; /&gt;
&lt;/div&gt;</pre>
<p>Для начала разберем самый простой случай использования виджета &#8211; когда для формирования списка подсказок используются локальные данные.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  var availableTags = [&quot;ActionScript&quot;,&quot;AppleScript&quot;,&quot;Asp&quot;,&quot;BASIC&quot;,
  &quot;C&quot;,&quot;C++&quot;,&quot;Clojure&quot;,&quot;COBOL&quot;,&quot;ColdFusion&quot;,&quot;Erlang&quot;,&quot;Fortran&quot;,
  &quot;Groovy&quot;,&quot;Haskell&quot;,&quot;Java&quot;,&quot;JavaScript&quot;,&quot;Lisp&quot;,&quot;Perl&quot;,&quot;PHP&quot;,
  &quot;Python&quot;,&quot;Ruby&quot;,&quot;Scala&quot;,&quot;Scheme&quot;];

  $(&quot;#tags&quot;).autocomplete({
    source: availableTags
  });
});
&lt;/script&gt;</pre>
<p>В переменной <strong>availableTags</strong> приготовили массив с подсказками. Затем выбрали элемент <strong>input</strong> по его идентификатору и применили метод <strong>autocomplete</strong>, которому сразу передали объект с настройками. Пока этот объект с единственным свойством <strong>source</strong>, которое определяет источник данных. В нашем случае указан массив <strong>availableTags</strong>.</p>
<p>На самом деле мы можем немного поднастроить виджет, используя другие свойства объекта настроек. Вот список этих свойств:</p>
<p><strong>source</strong> &#8211; опция не имеет значения по умолчанию и должна быть обязательно определена. Значением опции может являться строка, массив или функция. В любом случае в этой опции должен быть указан источник данных.<br />
<strong>minLength</strong> &#8211; значение по умолчанию 1. В этой опции указывается количество символов, которое должно быть введено в поле ввода прежде, чем активизируются подсказки. Значение 0 полезно при использовании локальных данных при списках из нескольких позиций. Это значение должно быть увеличено при использовании запросов к серверу для получения данных и при использовании больших списков, где одному введенному символу может соответствовать несколько тысяч наименований.<br />
<strong>delay</strong> &#8211; значение по умолчанию 300. В этой опции указывается количество миллисекунд, которое должно пройти после нажатия очередной клавиши, чтобы активизировался запрос на получение данных. Нулевое значение имеет смысл при использовании локальных данных. При использовании запросов к серверу нулевое значение в этой опции может породить серьезную нагрузку<br />
<strong>appendTo</strong> &#8211; значение по умолчанию ‘body’. В качестве значения этой опции может быть использован селектор jQuery. Определяет, к какому элементу должен быть добавлен выпадающий список подсказок.<br />
<strong>disabled</strong> &#8211; значение по умолчанию false. Если установить значение true, то при инициализации функциональность виджета Autocomplete будет недоступна, однако может быть включена впоследствии, например, при выполнении какого-либо условия.</p>
<p>Дальше посмотрим, как виджет может реагировать на события.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  var availableTags = [&quot;ActionScript&quot;,&quot;AppleScript&quot;,&quot;Asp&quot;,&quot;BASIC&quot;,
  &quot;C&quot;,&quot;C++&quot;,&quot;Clojure&quot;,&quot;COBOL&quot;,&quot;ColdFusion&quot;,&quot;Erlang&quot;,&quot;Fortran&quot;,
  &quot;Groovy&quot;,&quot;Haskell&quot;,&quot;Java&quot;,&quot;JavaScript&quot;,&quot;Lisp&quot;,&quot;Perl&quot;,&quot;PHP&quot;,
  &quot;Python&quot;,&quot;Ruby&quot;,&quot;Scala&quot;,&quot;Scheme&quot;];
  $(&quot;#tags&quot;).autocomplete({
    source: availableTags,
    select: function(event, ui) {
      alert('Событие: ' + event.type +
            ',\nзначение: ' + ui.item.value);
    }
  });
});
&lt;/script&gt;</pre>
<p>Здесь мы добавили свойство <strong>select</strong>, где определили функцию, которая будет вызываться в тот момент, когда пользователь выберет какое-либо значение из списка подсказок. функция принимает два аргумента: первый — объект <strong>event</strong>, второй — специальный объект <strong>ui</strong>. Организовав доступ к свойствам этих объектов, можно получить полезную информацию (мы выводим ее в окне предупреждения).</p>
<p>Это не единственное событие на которое умеет реагировать виджет &#8211; вот полный их список, где указано название свойства в объекте с настройками, название события в event.type и описание события:</p>
<p><strong>create</strong> &#8211; Событие <em>autocompletecreate</em> наступает в момент инициализации.<br />
<strong>search</strong> &#8211; событие <em>autocompletesearch</em> наступает перед выполнением запроса. Если функция, определенная в этой опции вернет false, запрос не будет отправлен.<br />
<strong>open</strong> &#8211; событие	<em>autocompleteopen</em> наступает в момент, когда открывается выпадающий список подсказок.<br />
<strong>focus</strong> &#8211; событие <em>autocompletefocus</em> наступает всякий раз, когда один из пунктов списка подсказок получает фокус.<br />
<strong>select</strong> &#8211; событие <em>autocompleteselect</em> наступает, когда выбран один из пунктов списка подсказок.<br />
<strong>close</strong> &#8211; событие <em>autocompleteclose</em> наступает, когда список подсказок закры-вается. Событие наступает независимо от того, был выбран один из пунктов или нет.<br />
<strong>change</strong> &#8211; событие <em>autocompletechange</em> наступает после того, как выбран один из пунктов списка. Событие всегда наступает после close.</p>
<p>Есть у виджета и некоторые методы, с помощью которых можно еще более расширить его функциональность.</p>
<p>Для примера добавьте в HTML-разметку пару кнопок:</p>
<pre class="brush: xml;">&lt;button id=&quot;search&quot;&gt;Искать &quot;as&quot;&lt;/button&gt;
&lt;button id=&quot;close&quot;&gt;Закрыть&lt;/button&gt;
&lt;div class=&quot;ui-widget&quot;&gt;
	&lt;label for=&quot;tags&quot;&gt;Tags: &lt;/label&gt;
	&lt;input id=&quot;tags&quot; type=&quot;text&quot; /&gt;
&lt;/div&gt;</pre>
<p>И вот такой JS-код:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  var availableTags = [&quot;ActionScript&quot;,&quot;AppleScript&quot;,&quot;Asp&quot;,&quot;BASIC&quot;,
  &quot;C&quot;,&quot;C++&quot;,&quot;Clojure&quot;,&quot;COBOL&quot;,&quot;ColdFusion&quot;,&quot;Erlang&quot;,&quot;Fortran&quot;,
  &quot;Groovy&quot;,&quot;Haskell&quot;,&quot;Java&quot;,&quot;JavaScript&quot;,&quot;Lisp&quot;,&quot;Perl&quot;,&quot;PHP&quot;,
  &quot;Python&quot;,&quot;Ruby&quot;,&quot;Scala&quot;,&quot;Scheme&quot;];
  $(&quot;#tags&quot;).autocomplete({
    source: availableTags,
    minLength: 0
  });
  $(&quot;#search&quot;).click(function(){
    $(&quot;#tags&quot;).autocomplete(&quot;search&quot;, &quot;as&quot;);
  });
  $(&quot;#close&quot;).click(function(){
    $(&quot;#tags&quot;).autocomplete(&quot;close&quot;);
  });
});
&lt;/script&gt;</pre>
<p>Теперь, щелкая по кнопке <strong>Искать &laquo;as&raquo;</strong> мы можем имитировать действия пользователя, как если бы он ввел символы <strong>&laquo;as&raquo;</strong> в элементе <strong>input</strong>. Щелкнув по кнопке <strong>Закрыть</strong> &#8211; закрываем список подсказок, если он был открыт ранее.</p>
<p>Ниже приведены описания всех доступных методов:</p>
<p><strong>destroy</strong> &#8211; .autocomplete( &#8216;destroy&#8217; ) полностью удаляет всю функциональность виджета Autocomplete. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .autocomplete(&#8216;disable&#8217;) временно запрещает использование всей функциональности виджета. Вновь разрешить ее можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .autocomplete(&#8216;enable&#8217;) разрешает использование всей функциональности виджета, если ранее она была запрещена методом disable.<br />
<strong>option</strong> &#8211; .autocomplete(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно установить значение любой опции виджета после инициализации.<br />
<strong>option</strong>  &#8211; .autocomplete(&#8216;option&#8217;, optionName) с помощью этого метода можно получить значение любой опции виджета после инициализации.<br />
<strong>widget</strong> &#8211; .autocomplete(&#8216;widget&#8217;) с помощью этого метода можно получить доступ к объекту, который представляет собой элемент с функциональностью Autocomplete.<br />
<strong>search</strong> &#8211; .autocomplete(&#8217;search, [value]&#8216;) с помощью этого метода без передачи второго па-раметра можно открыть весь список. Если передать во втором параметре строку символов, то будет открыт список с подходящими подсказками.<br />
<strong>close</strong> &#8211; .autocomplete(&#8216;close&#8217;) закрывает список подсказок, если он был открыт ранее.</p>
<p>В общем теперь мы знаем как настраивать виджет и управлять им, но пока мы использовали исключительно локальные данные для формирования списка подсказок. Для изучения возможностей &#8211; подойдет, но для реальной работы &#8211; вряд ли. В реальной работе наверняка потребуется формировать подсказки из данных, хранящихся на своем сервере, а может быть и вообще не на своем <img src='http://www.linkexchanger.su/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Опция <strong>source</strong>, которая, напомню, является обязательной и определяет источник данных, может принимать также строку, где содержится url, к которому следует отправлять запрос. А еще в <strong>source</strong> можно определить свою функцию, которая будет делать, то что надо именно Вам. Вот этот, пожалуй самый гибкий способ мы и разберем. Попробуем получить в виде списка подсказок какие-либо данные с сервера <strong>geonames.org</strong></p>
<p>Я приведу полностью рабочий код и попробую разъяснить, как и что работает.</p>
<pre class="brush: xml;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;ru&quot; xml:lang=&quot;ru&quot;&gt;
&lt;head&gt;
&lt;title&gt;example-17-8-4&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link type=&quot;text/css&quot; href=&quot;css/ui-lightness/jquery-ui-1.8.9.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.4.4.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.8.9.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;style type=&quot;text/css&quot;&gt;
.ui-autocomplete-loading {
  background: #FFF url('css/ui-lightness/images/ui-anim_basic_16x16.gif') right center no-repeat;
}
#city { width: 25em; }
#log { height: 200px; width: 600px; overflow: auto; }
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(function() {
  $(&quot;#city&quot;).autocomplete({
    source: function(request,response) {
      $.ajax({
        url: &quot;http://ws.geonames.org/searchJSON&quot;,
        dataType: &quot;jsonp&quot;,
        data: {
          featureClass: &quot;P&quot;,
          style: &quot;full&quot;,
          maxRows: 12,
          name_startsWith: request.term
        },
        success: function(data) {
          response($.map(data.geonames, function(item) {
            return {
              label: item.name + &quot;, &quot; + item.countryName,
              value: item.name + &quot; (&quot; + item.countryName + &quot;)&quot; + &quot; [&quot; + item.lat + &quot;, &quot; + item.lng + &quot;]&quot;
            }
          }));
        }
      });
    },
    minLength: 3,
    select: function(event,ui) {
      $(&quot;&lt;p/&gt;&quot;).text(ui.item ? ui.item.value : &quot;Ничего не выбрано!&quot;).prependTo(&quot;#log&quot;);
      $(&quot;#log&quot;).attr(&quot;scrollTop&quot;, 0);
    }
  });
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;ui-widget&quot;&gt;
  &lt;label for=&quot;city&quot;&gt;Город: &lt;/label&gt;&lt;input id=&quot;city&quot; /&gt;&lt;br /&gt;
  &lt;span style=&quot;font-size:.8em;&quot;&gt;Поддерживается &lt;a href=&quot;http://geonames.org&quot;&gt;geonames.org&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div id=&quot;log&quot; class=&quot;ui-widget ui-widget-content&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Сначала смотрим на HTML-разметку. В первом элементе <strong>div</strong> нас интересует только элемент <strong>input</strong> с идентификатором <strong>city</strong>. Сюда будем вводить начальные буквы (на латинице) населенного пункта, информацию о котором мы хотели бы получить. Элемент <strong>div</strong> с идентификатором <strong>log</strong> используем для занесения в него полученной информации.</p>
<p>Если смотреть JavaScript-код, то увидим, что объект с настройками содержит три свойства — обязательное свойство <strong>source</strong>, а также свойства <strong>minLength</strong> и <strong>select</strong>.<br />
Мы займемся рассмотрением только свойства <strong>source</strong>, где можно написать свою функцию. Эта функция принимает два аргумента. Первый аргумент — <strong>request</strong> — объект, содержащий единственное свойство <strong>term</strong>, в котором хранится строка, введенная пользователем в поле ввода. Второй аргумент — <strong>response</strong> — функция, с помощью которой будет обрабатываться полученный ответ.</p>
<p>Внутри функции, определенной в свойстве <strong>source</strong> мы имеем практически неограниченную свободу действий. А поэтому, не мудрствуя, пишем там ajax-запрос к <strong>url</strong> http://ws.geonames.org/searchJSON, в опции <strong>dataType</strong> указываем, что в ответе ожидаем получить данные в формате JSON. В опции <strong>data</strong> определяем объект с параметрами запроса, который будет отправляться на указанный <strong>url</strong> (<em>почему параметры именно такие &#8211; надо смотреть документацию по API на сервере geonames.org</em>). В последнем параметре передаем <strong>request.term</strong> &#8211; то, что ввел пользователь.</p>
<p>В следующей опции ajax-запроса &#8211; опции <strong>success</strong>, вызываем функцию обработки ответа <strong>response</strong>. В аргументе, который мы передаем этой функции, мы можем обрабатывать данные, полученные в ответе сервера так, как нам будет угодно. Мы используем метод <strong>$.map</strong> чтобы применить некоторую функцию к каждому элементу объекта, переданному в первом аргументе. Внутри функции мы можем обращаться к свойствам объекта — <strong>item.countryName</strong>, <strong>item.lng</strong>, <strong>item.lat</strong> (<em>почему свойства именно такие &#8211; см. документацию по API, которую предоставляет веб-сервис</em>). Функция, которую мы написали, для каждого элемента возвращает объект, содержащий два свойствами, которые мы определили самостоятельно, используя полученные данные. Из получившегося массива таких объектов и строится список подсказок.</p>
<p>В общем, вот так как-то&#8230; В заключение, большая человеческая просьба &#8211; в комментариях пожалуйста, можете похвалить или поругать в принципе. Если же Вы хотите задать технический вопрос, то задавайте его на <a href="http://www.linkexchanger.su/forum/">форуме jQuery</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2011/700.html/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; плагин Sortable</title>
		<link>http://www.linkexchanger.su/2009/111.html</link>
		<comments>http://www.linkexchanger.su/2009/111.html#comments</comments>
		<pubDate>Fri, 09 Oct 2009 05:07:24 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Sortable]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/111.html</guid>
		<description><![CDATA[Плагин Sortable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Sortable предоставляет возможность организовать сортировку элементов, перемещая их с помощью указателя мыши.

Читаем, и пробуем проделать все это самостоятельно.
Для начала посетим страницу настраиваемой закачки на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Sortable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Sortable предоставляет возможность организовать сортировку элементов, перемещая их с помощью указателя мыши.<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_sortable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="320" width="418"></iframe><br />
Читаем, и пробуем проделать все это самостоятельно.<span id="more-111"></span></p>
<p>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Sortable</strong> и видим, что вместе с ним отметились <strong>чекбоксы UI Core и Draggable</strong>. Работа плагина Sortable зависит от них, поэтому они необходимы.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>Сначала в разделе HEAD подключаем несколько файлов, которые есть в архиве:</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/sunny/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Здесь мы подключили файл стилей css/sunny/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Хотите использовать Ваше собственное оформление &#8211; пожалуйста, но в примере мы используем готовое. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагинов Sortable и Draggable.</p>
<p>Смотрим HTML-разметку. Пусть у нас она будет выглядеть так:</p>
<pre class="brush: xml;">&lt;ul id=&quot;sortable&quot;&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 1&lt;/li&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 2&lt;/li&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 3&lt;/li&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 4&lt;/li&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 5&lt;/li&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 6&lt;/li&gt;
  &lt;li class=&quot;ui-state-default&quot;&gt;Item 7&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>и следующий javascript-код, который применит к выбранному элементу функциональность плагина Sortable.</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#sortable&quot;).sortable();
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_sortable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>В этом примере мы использовали плагин с настройками по умолчанию, но поскольку его можно очень гибко настраивать с помощью большого количества различных опций, то обязательно надо познакомиться с тем, как это делается. В следующем примере мы передадим плагину пару опций.</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#sortable&quot;).sortable({
  	placeholder: &quot;ui-state-highlight&quot;,
  	opacity: 0.6
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_sortable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Опция placeholder передает плагину имя css-класса, который будет применен к той позиции, откуда элемент начал перемещение (или куда он может быть помещен), а опция opacity устанавливает прозрачность элемента во время перемещения. Значения остальных опций передаются плагину подобным образом.</p>
<p><strong>appendTo</strong> &#8211; по умолчанию эта опция имеет значение &#8216;parent&#8217;. В ней можно передать селектор jQuery или элемент, который будет использован в качестве контейнера для объекта, представляющего сортируемый элемент во время его перемещения.<br />
<strong>axis</strong> &#8211; в качестве значения используется строка. Доступные значения &#8216;x&#8217; или &#8216;y&#8217;. По умолчанию установлено false. Если определить эту опцию, сортируемые элементы смогут перемещаться только по вертикали или горизонтали.<br />
<strong>cancel</strong> &#8211; в качестве значения используется селектор jQuery. Предотвращает сортировку, если она начинается на элементе, указанном в это опции. По умолчанию используется значение &#8216;:input,button&#8217;.<br />
<strong>connectWith</strong> &#8211; в качестве значения принимает селектор jQuery, где можно указать другой сортируемый список, в который можно будет перемещать сортируемые элементы, таким образом, что они станут частью другого сортируемого списка.<br />
<strong>containment</strong> &#8211; ограничивает перемещение внутри определенного элемента или области. В качестве значения может принимать селектор jQuery, элемент или строку. Примеры возможных значений: &#8216;parent&#8217;, &#8216;document&#8217;, &#8216;window&#8217;. По умолчанию – false.<br />
<strong>cursor</strong> &#8211; строка, определяющая вид курсора в процессе перемещения элемента. По умолчанию установлено значение &#8216;auto&#8217;.<br />
<strong>cursorAt</strong> &#8211; объект, который определяет положение указателя мыши во время перемещения элемента. Для задания координат используется комбинация одного или двух свойств из четырех возможных &#8211; &#8216;top&#8217;, &#8216;right&#8217;, &#8216;bottom&#8217; и &#8216;left&#8217;. Например: {top: 10, left: 20} или {bottom: 5}. По умолчанию – false.<br />
<strong>delay</strong> &#8211; число, указанное в этой опции, определяет отсрочку начала перемещения элемента. Указывается в миллисекундах. Опция помогает предотвратить нежелательное перемещение элемента во время случайного щелчка мышью. По умолчанию используется значение 0.<br />
<strong>distance</strong> &#8211; число в пикселах, определяющее расстояние, которое должен пройти указатель мыши (с одновременно нажатой левой клавишей), чтобы начался процесс перемещения элемента. Опция помогает предотвратить нежелательное перемещение элемента во время случайного щелчка мышью. По умолчанию используется значение 1.<br />
<strong>dropOnEmpty</strong> &#8211; по умолчанию используется значение true. В этом случае, если один из связанных списков пустой, в него можно перемещать элементы из другого списка. Если установить значение false, эта возможность будет запрещена.<br />
<strong>grid</strong> &#8211; по умолчанию – false. Значением может быть массив из двух чисел, определяющий шаг сетки, по которой будет перемещаться сортируемый элемент. Например: grid: [20,20]<br />
<strong>handle</strong> &#8211; по умолчанию установлено значение false. В качестве значения можно указать селектор jQuery или элемент. В этом случае процесс сортировки можно будет начать только в том случае, если левая клавиша мыши нажата в момент нахождения указателя мыши над элементом, определенным в этой опции.<br />
<strong>helper</strong> &#8211; по умолчанию используется значение &#8216;original&#8217;. В этом случае, при сортировке, перемещаемый элемент представлен самим элементом. Другое возможное значение &#8216;clone&#8217;. В этом случае элемент при перемещении представлен своей копией.<br />
<strong>items</strong> &#8211; в качестве значения используется селектор jQuery. По умолчанию установлено значение &#8216;&gt; *&#8217;. Опция определяет, какие элементы, являющиеся элементами-потомками того элемента, с которым связана функциональность плагина, могут быть сортируемыми.<br />
<strong>opacity</strong> &#8211; значение опции может изменяться от 0.01 до 1 и определяет прозрачность перемещаемого элемента. По умолчанию – false.<br />
<strong>placeholder</strong> &#8211; имя css-класса, который будет применен к той позиции, откуда элемент начал перемещение. Если значение опции не определено «пустая» позиция никак не оформляется.<br />
<strong>revert</strong> &#8211; по умолчанию используется значение false. Если использовать значение true, то при перемещении элемента, после того, как будет отпущена клавиша мыши, элемент переместится на свою новую позицию с использованием плавного анимационного эффекта.<br />
<strong>scroll</strong> &#8211; по умолчанию установлено значение true – при перемещении элемента к краю области просмотра, она автоматически прокручивается бесконечно. Если установить значение false, эта возможность будет запрещена.<br />
<strong>scrollSensitivity</strong> &#8211; число, определяющее расстояние в пикселах от края области просмотра, после которого она начинает прокручиваться. Расстояние определяется относительно указателя мыши, а не перемещаемого элемента. По умолчанию установлено значение 20.<br />
<strong>scrollSpeed</strong> &#8211; число, определяющее скорость, с которой прокручивается область просмотра при приближении указателя мыши к ее краю на расстояние определенное в опции scrollSensitivity. По умолчанию установлено значение 20.<br />
<strong>tolerance</strong> &#8211; по умолчанию эта опция имеет значение &#8216;intersect&#8217;. При этом элемент, перемещаемый во время сортировки должен перекрыть любой другой сортируемый элемент как минимум на 50%, чтобы тот «освободил» занимаемое место. Другое возможное значение &#8211; &#8216;pointer&#8217;. При этом над сортируемым элементом должен оказаться только указатель мыши.<br />
<strong>zIndex</strong> &#8211; число, которое определяет значение css-свойства z-index для элемента в момент его сортировки.</p>
<p>Настало время познакомиться с событиями, на которые умеет реагировать плагин Sortable. Пример использования одного из возможных событий плагина приведен в следующем примере:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#sortable&quot;).sortable({
  	placeholder: &quot;ui-state-highlight&quot;,
  	opacity: 0.6,
  	stop: function(event, ui) {
  	  alert(event.type);
  	}
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_sortable/example-three.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Здесь мы использовали только опцию stop, в которой определили функцию, которая будет вызвана в момент окончания сортировки. Функция может принимать два аргумента. Первый аргумент – объект события, второй – специальный объект ui, в свойствах которого можно обнаружить разнообразную полезную информацию. Но в приведенном примере мы используем только свойство type объекта события, чтобы вывести в окне предупреждения название события, вызвавшего нашу функцию.</p>
<p>А вот пример того, как можно использовать специальный объект ui:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#sortable&quot;).sortable({
    placeholder: &quot;ui-state-highlight&quot;,
    opacity: 0.6,
    helper: &quot;clone&quot;,
    change: function(event, ui) {
      ui.helper.css(&quot;color&quot;,&quot;#f00&quot;);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_sortable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы использовали опцию change, чтобы вызвать функцию в момент изменения положения сортируемого элемента. Внутри функции мы обращаемся к одному из свойств объекта ui – к свойству helper. Это свойство является объектом, который представляет перемещаемый элемент во время сортировки. Используя метод css(name,value) мы устанавливаем красный цвет шрифта на перемещаемом элементе. Но, как только этот элемент займет свое новое место в списке, цвет шрифта вернется к исходному значению. Догадались почему? Если нет, то обратите внимание на опцию helper. Установив значение clone в этой опции, мы использовали во время перемещения не сам исходный объект, а его копию.<br />
Кстати, helper – это не единственное полезное свойство объекта ui, есть и другие:</p>
<p><strong>ui.helper</strong> – объект, характеризующий элемент, находящийся в процессе перемещения;<br />
<strong>ui.position</strong> – объект, в свойствах top и left которого содержится информация о положении перемещаемого элемента относительно родительского элемента;<br />
<strong>ui.offset</strong> – объект, в свойствах top и left которого содержится информация об абсолютном положении перемещаемого элемента;<br />
<strong>ui.item</strong> – объект, представляющий сортируемый элемент;<br />
<strong>ui.placeholder</strong> – объект, представляющий место, откуда был перемещен сортируемый элемент (или куда он будет перемещен);<br />
<strong>ui.sender</strong> – объект, который представляет элемент-контейнер для сортируемых элементов, откуда сортируемый элемент был перемещен (при использовании связанных списков);</p>
<p>Ниже перечислены опции, связанные с событиями плагина Sortable, их довольно много:<br />
Опция <strong>start</strong> &#8211; событие <em>sortstart</em> наступает в момент начала сортировки.<br />
Опция <strong>sort</strong> &#8211; событие <em>sort</em> наступает постоянно в течение сортировки.<br />
Опция <strong>change</strong> &#8211; событие <em>sortchange</em> наступает во время сортировки, но только в том случае, если изменилось положение сортируемого элемента в объектной модели документа.<br />
Опция <strong>beforeStop</strong> &#8211; событие <em>sortbeforeStop</em> наступает в момент сортировки, перед ее окончанием (когда отпущена левая клавиша мыши).<br />
Опция <strong>stop</strong> &#8211; событие <em>sortstop</em> наступает в момент окончания сортировки.<br />
Опция <strong>update</strong> &#8211; событие <em>sortupdate</em> наступает в момент окончания сортировки, но только в том случае, если порядок сортируемых элементов был изменен.<br />
Опция <strong>receive</strong> &#8211; событие <em>sortreceive</em> наступает, когда связанный сортируемый список принимает элемент из другого списка.<br />
Опция <strong>remove</strong> &#8211; событие <em>sortremove</em> наступает, когда элемент покидает один связанный список, и перемещается в другой.<br />
Опция <strong>over</strong> &#8211; событие <em>sortover</em> наступает, когда сортируемый элемент перемещен в связанный список.<br />
Опция <strong>out</strong> &#8211; событие <em>sortout</em> наступает, когда сортируемый элемент перемещен из связанного списка.<br />
Опция <strong>activate</strong> &#8211; событие <em>sortactivate</em> наступает при использовании связанных списков, для каждого связанного списка при начале процесса сортировки.<br />
Опция <strong>deactivate</strong> &#8211; событие <em>sortdeactivate</em> наступает при использовании связанных списков, для каждого связанного списка при окончании процесса сортировки.</p>
<p>А теперь &#8211; методы плагина. С помощью методов можно управлять плагином после инициализации. Сначала добавим кнопочку в HTML-разметку:</p>
<pre class="brush: xml;">&lt;button id=&quot;cancelSort&quot;&gt;Cancel Sort&lt;/button&gt;</pre>
<p>и небольшой пример:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#sortable&quot;).sortable({
  	placeholder: &quot;ui-state-highlight&quot;,
  	opacity: 0.6
  });
  $(&quot;#cancelSort&quot;).click(function(){
  	$(&quot;#sortable&quot;).sortable(&quot;cancel&quot;);
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_sortable/example-five.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Метод .sortable(&laquo;cancel&raquo;) использованный в примере, один из самых полезных методов плагина. Он позволяет отменить результат последней операции сортировки и вернуть элементы к предшествующему состоянию.<br />
Обратите внимание на элемент button с идентификатором #cancelSort. С кнопкой связан обработчик события click, по которому и вызывается метод соответствующий метод.<br />
Если Вы попробуете переместить один из элементов с писка на новое место, а затем нажать на кнопку cancelSort, список вернется в предыдущее состояние.</p>
<p>Но конечно, этот метод не единственный. Вот другие:<br />
<strong>destroy</strong> &#8211; .sortable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Sortable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .sortable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .sortable(&#8216;enable&#8217;) разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .sortable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.<br />
<strong>serialize</strong> &#8211; .sortable(&#8217;serialize&#8217;, [option]) упорядочивает значение атрибутов id элементов сортируемого списка в строку, которую можно передать на сервер с помощью ajax-запроса. Предъявляет требования к формату записи значения атрибута id. Допустимые форматы: id=&#8217;name_number&#8217; или id=&#8217;name-number&#8217;. В этом случае вид строки получается &#8216;name[]=number&amp; name[]=number&#8217;. Вторым, необязательным параметром, можно передать объект. Возможные значения: &#8216;key&#8217; – заменит часть &#8216;name[]&#8216; на необходимую Вам, &#8216;attribute&#8217; – попробует получить значения из атрибута, отличного от id, &#8216;expression&#8217; – можно использовать свое регулярное выражение.<br />
<strong>toArray</strong> &#8211; .sortable(&#8216;toArray&#8217;) упорядочивает значение атрибутов id элементов сортируемого списка в массив.<br />
<strong>cancel</strong> &#8211; .sortable(&#8216;cancel&#8217;) отменяет результат последней операции сортировки и возвращает элемент в состояние, предшествующее этой операции. Метод полезен при использовании в callback-функциях, связанных с событиями stop или receive.</p>
<p>Ну, и &laquo;на сладкое&raquo; &#8211; конечно обязательно надо дать пример использования связанных списков.</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#sortable1, #sortable2&quot;).sortable({
  	connectWith: &quot;.connectedSortable&quot;,
  	tolerance: &quot;pointer&quot;
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_sortable/example-six.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Я привел пример только javascript-кода, поскольку в HTML-коде страницы ничего особенного нет – просто два ненумерованных списка #sortable1 и #sortable2. С помощью javascript-кода мы сделаем их сортируемыми, указав их идентификаторы в селекторе jQuery и связав с ними функциональность Sortable. Самое главное заключается в использовании опции connectWith. Здесь мы указываем имя класса для того списка, который хотим сделать связанным с другим списком.<br />
Обратите внимание, что атрибут class со значением connectedSortable мы присвоили обоим спискам и добились того, что элементы могут перемещаться не только из первого списка во второй, но и наоборот. Если бы мы захотели организовать только «одностороннее движение», скажем из первого списка во второй, мы бы присвоили класс connectedSortable только второму списку.</p>
<p>Теперь сортируемые элементы можно переносить из одного списка в другой и элемент, перемещенный из одного списка в другой, становится частью другого списка.</p>
<blockquote><p>Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_sortable/ui_sortable.zip">архиве</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/111.html/feed</wfw:commentRss>
		<slash:comments>74</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; плагин Selectable</title>
		<link>http://www.linkexchanger.su/2009/110.html</link>
		<comments>http://www.linkexchanger.su/2009/110.html#comments</comments>
		<pubDate>Thu, 08 Oct 2009 05:23:17 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[selectable]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/110.html</guid>
		<description><![CDATA[Плагин Selectable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Он дает возможность выбора элементов с помощью передвижения указателя мыши с удержанием в нажатом состоянии ее левой клавиши или комбинации щелчка мышью с нажатием и удержанием клавиши Ctrl (Meta), подобно тому, как это делается [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Selectable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Он дает возможность выбора элементов с помощью передвижения указателя мыши с удержанием в нажатом состоянии ее левой клавиши или комбинации щелчка мышью с нажатием и удержанием клавиши Ctrl (Meta), подобно тому, как это делается в традиционных приложениях.<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_selectable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="320" width="418"></iframe><br />
Сделаем сами?<span id="more-110"></span></p>
<p>Идем на страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Selectable</strong> и видим, что вместе с ним отметился <strong>чекбокс UI Core</strong>. Работа плагина Selectable зависит от него, поэтому он необходим.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>Сначала в разделе HEAD подключаем несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/le-frog/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Подключили файл стилей css/le-frog/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Конечно, свое собственное оформление лучше, но для изучения примеров воспользуемся готовым оформлением. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагина Selectable.</p>
<p>Опыты будем ставить над списком ol, пункты которого нам предстоит сделать выделяемыми. Вот пример HTML-разметки:</p>
<pre class="brush: xml;">&lt;ol id=&quot;selectable&quot;&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 1&lt;/li&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 2&lt;/li&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 3&lt;/li&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 4&lt;/li&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 5&lt;/li&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 6&lt;/li&gt;
  &lt;li class=&quot;ui-widget-content&quot;&gt;Item 7&lt;/li&gt;
&lt;/ol&gt;</pre>
<p>и пример javascript-кода, который связывает с подопытным списком функциональность плагина:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#selectable&quot;).selectable();
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_selectable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Это был пример, где все возможные настройки устанавливались по умолчанию. Не будем с этим мириться и попробуем передать какие-нибудь настройки самостоятельно.</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#selectable&quot;).selectable({
    distance: 30
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_selectable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>В примере мы передали плагину значение 30 в опции distance, и этим определили расстояние в пикселах, которое должен пройти указатель мыши (с одновременно нажатой левой клавишей), прежде, чем начнется выделение указанных элементов. Значения для остальных опций можно передать плагину подобным образом. Опций у этого плагина немного, всего шесть:</p>
<p><strong>autoRefresh</strong> &#8211; по умолчанию установлено значение true, что определяет пересчет положения и размеров области выделения при попадании туда очередного элемента. Если таких элементов очень много, может понадобиться отключить пересчет. Для этого следует установить значение false. При необходимости можно будет использовать для пересчета метод .selectable(&#8216;refresh&#8217;).<br />
<strong>cancel</strong> &#8211; опция принимает в качестве значения селектор jQuery. Предотвращает начало выбора элементов, если при начале выбор указатель мыши находится над указанными элементами. По умолчанию установлено значение &#8216;:input,option&#8217;.<br />
<strong>delay</strong> &#8211; в опции указывается число, устанавливающее время в миллисекундах, определяющее задержку начала выбора элементов. По умолчанию – 0.<br />
<strong>distance</strong> &#8211; в опции указывается число, устанавливающее расстояние в пикселах, которое должен пройти указатель мыши до начала выбора элементов. По умолчанию – 0.<br />
<strong>filter</strong> &#8211; в качестве значения опции указывается селектор jQuery. По умолчанию используется значение &#8216;*&#8217;. В этой опции можно указывать элементы-потомки, которые будут сделаны выбранными (при условии, если они могут быть таковыми).<br />
<strong>tolerance</strong> &#8211; опция принимает в качестве значения строку. По умолчанию используется значение &#8216;touch&#8217;. Возможные значения <em>&#8216;touch&#8217;</em> и <em>&#8216;fit&#8217;</em>. При использовании значения <em>&#8216;touch&#8217;</em> выбор элемента производится, когда область выбора перекрывает элемент какой-либо частью. При использовании значения <em>&#8216;fit&#8217;</em> выбор элемента производится, только когда область выбора перекрывает элемент полностью.</p>
<p>Посмотрим теперь, на какие события может реагировать плагин Selectable. Таких событий всего шесть. Для начала разберем простенький пример:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#selectable&quot;).selectable({
    stop: function(event, ui) {
      alert(event.type);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_selectable/example-three.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Callback-функция, которую мы определили в опции stop, может принимать два аргумента. Первый аргумент – объект события. Мы используем его внутри функции, обращаясь к свойству type, чтобы вывести в окне предупреждения название события, вызвавшего функцию.</p>
<p>В следующем примере используем еще пару опций, связанных с событиями и заодно опробуем объект ui:</p>
<pre class="brush: jscript;">$(function(){
 $(&quot;#selectable&quot;).selectable({
  start: function(event) {
   $(&quot;#result&quot;).empty().append(&quot;Событие: &quot; +
   event.type);
  },
  selected: function(event, ui) {
   $(&quot;#result&quot;).append(&quot;Событие: &quot; + event.type +
   &quot; для &quot; + ui.selected.innerHTML);
  },
  stop: function(event) {
   $(&quot;#result&quot;).append(&quot;Событие: &quot; +
    event.type);
   }
 });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_selectable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>В этом примере мы использовали опции start, selected и stop. В опциях start и stop определяются callback-функции, которые вызываются при начале и окончании выбора элементов. В опции selected можно определить callback-функцию, которая вызывается для каждого выбранного элемента по окончании выбора.</p>
<p><strong>selected</strong> &#8211; событие <em>selected</em> наступает по окончании выбора для каждого выбранного элемента.<br />
<strong>selecting</strong> &#8211; событие <em>selecting</em> наступает в процессе выбора для каждого выбранного элемента.<br />
<strong>start</strong> &#8211; событие <em>selectablestart</em> наступает при начале процесса выбора.<br />
<strong>stop</strong> &#8211; событие <em>selectablestop</em> наступает при окончании процесса выбора.<br />
<strong>unselected</strong> &#8211; событие <em>unselected</em> наступает по окончании выбора для каждого элемента не попавшего в выбор по сравнению с предыдущим состоянием.<br />
<strong>unselecting</strong> &#8211; событие <em>unselecting</em> происходит в процессе выбора, когда какой-либо элемент, присутствовавший в выборе, удаляется из него.</p>
<p>Еще плагин Selectable имеет несколько методов, с помощью которых можно управлять им после инициализации. Для того, чтобы испытать методы, добавим несколько кнопок в HTML-разметку:</p>
<pre class="brush: xml;">&lt;button id=&quot;disable&quot;&gt;Disable&lt;/button&gt;
&lt;button id=&quot;enable&quot;&gt;Enable&lt;/button&gt;
&lt;button id=&quot;destroy&quot;&gt;Destroy&lt;/button&gt;</pre>
<p>и используем вот такой javascript-код:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#selectable&quot;).selectable();
  $(&quot;#disable&quot;).click(function(){
  	$(&quot;#selectable&quot;).selectable(&quot;disable&quot;);
  });
  $(&quot;#enable&quot;).click(function(){
  	$(&quot;#selectable&quot;).selectable(&quot;enable&quot;);
  });
  $(&quot;#destroy&quot;).click(function(){
  	$(&quot;#selectable&quot;).selectable(&quot;destroy&quot;);
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_selectable/example-five.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы используем три кнопки с идентификаторами #disable, #enable и #destroy, связывая с ними события click. При нажатии на кнопки вызываем соответствующий метод плагина Sortable, временно запрещая использование функциональности плагина, вновь восстанавливая эту функциональность, и удаляя ее окончательно, возвращая элементы в состояние, предшествующее инициализации.</p>
<p><strong>destroy</strong> &#8211; .selectable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Selectable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .selectable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .selectable(&#8216;enable&#8217;) разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .selectable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.<br />
<strong>refresh</strong> &#8211; .selectable(&#8216;refresh&#8217;) этот метод обычно используется, если для опции autoRefresh установлено значение false. С помощью него можно пересчитать положение и размеры области выделения.</p>
<blockquote><p> Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_selectable/ui_selectable.zip">архиве</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/110.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; плагин Resizable</title>
		<link>http://www.linkexchanger.su/2009/109.html</link>
		<comments>http://www.linkexchanger.su/2009/109.html#comments</comments>
		<pubDate>Wed, 07 Oct 2009 05:12:13 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Resizable]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/109.html</guid>
		<description><![CDATA[Плагин Resizable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Resizable позволяет изменять размеры выбранных элементов с помощью перемещения указателем мыши. Посмотрите на примере:

А сделать это не так сложно как кажется на первый взгляд. Конечно, если делать с помощью jQuery.
Для начала посетим страницу [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Resizable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Resizable позволяет изменять размеры выбранных элементов с помощью перемещения указателем мыши. Посмотрите на примере:<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_resizable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="280" width="418"></iframe><br />
А сделать это не так сложно как кажется на первый взгляд. Конечно, если делать с помощью jQuery.<span id="more-109"></span></p>
<p>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Resizable</strong> и видим, что вместе с ним отметился <strong>чекбокс UI Core</strong>. Работа плагина Resizable зависит от него, поэтому он необходим.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>В разделе <strong>HEAD</strong> веб-страницы необходимо подключить несколько файлов, которые есть в архиве:</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/start/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Сначала подключаем файл стилей css/start/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Вероятно, Вы будете использовать свое собственное оформление, но для изучения примеров лучше воспользоваться готовым оформлением. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагина Resizable.</p>
<p>Для примера возьмем следующую HTML-разметку:</p>
<pre class="brush: xml;">&lt;div id=&quot;resizable&quot; class=&quot;ui-widget-content&quot;&gt;
&lt;h3 class=&quot;ui-widget-header&quot;&gt;Resizable&lt;/h3&gt;
&lt;/div&gt;</pre>
<p>И javascript-код, который &laquo;привяжет&raquo; возможности плагина Resizable к выбранному элементу:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#resizable&quot;).resizable();
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_resizable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>И больше ничего! По крайней мере для того, чтобы использовать все настройки по умолчанию этого вполне хватит. Но мы попробуем передать плагину несколько опций:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#resizable&quot;).resizable({
  	animate: true,
  	ghost: true
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_resizable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы передали плагину две опции – animate и ghost. В обоих случаях передали логическое значение true. Но, что же мы этим смогли добиться?<br />
Передав значение true в опции animate, мы добились того, что теперь при изменении размеров элемента будет использоваться анимационный эффект.<br />
В случае с ghost: true при изменении размеров элемента будут отображаться его полупрозрачные контуры.<br />
Остальные опции, как Вы понимаете, используются таким же образом &#8211; главное знать, за что какая отвечает&#8230;</p>
<p><strong>alsoResize</strong> &#8211; по умолчанию имеет значение false. Может принимать селектор jQuery, объект jQuery или элемент. Элементы, определенные в этой опции также меняют свои размеры.<br />
<strong>animate</strong> &#8211; по умолчанию установлено значение false. Если установить значение true, при изменении размера будет использоваться анимация.<br />
<strong>animateDuration</strong> &#8211; в качестве значения опция принимает строку с предопределенными значениями &#8211; &#8217;slow&#8217;, &#8216;normal&#8217;, &#8216;fast&#8217; или число в миллисекундах, определяющее длительность анимационного эффекта при изменении размера элемента.<br />
<strong>animateEasing</strong> &#8211; опция принимает строку с названием анимационного эффекта. Большое количество разнообразных эффектов можно использовать при условии подключения дополнительного плагина jQuery Easing. По умолчанию имеет значение &#8217;swing&#8217;.<br />
<strong>aspectRatio</strong> &#8211; по умолчанию имеет значение false. Если установить true, при изменении размеров элемента будет сохраняться пропорция в соотношении сторон. Возможно также, передавать значения в виде 16/9 или 0.75. В этом случае пропорции в соотношении сторон будут установлены в соответствии с указанным значением.<br />
<strong>cancel</strong> &#8211; в качестве значения указывается селектор jQuery. Предотвращает изменение размеров для элементов, указанных в этой опции. По умолчанию имеет значение &#8216;:input,option&#8217;.<br />
<strong>containment</strong> &#8211; ограничивает изменение размеров внутри элемента определенного в этой опции. Значением может быть строка (например &#8216;parent&#8217;, &#8216;document&#8217;), элемент DOM или селектор jQuery. По умолчанию установлено значение false.<br />
<strong>delay</strong> &#8211; в этой опции можно указать число в миллисекундах, определив задержку старта изменения размеров элемента. По умолчанию установлено значение 0. Эта опция помогает предотвратить случайное изменение размеров элемента при щелчке мышью.<br />
<strong>distance</strong> &#8211; по умолчанию установлено значение 1. Опция определяет количество пикселей, на которое переместиться указатель мыши, прежде, чем начнется изменение размеров элемента. Эта опция помогает предотвратить случайное изменение размеров элемента при щелчке мышью.<br />
<strong>ghost</strong> &#8211; по умолчанию установлено значение false. Если установить true, при изменении размеров элемента будут видны его полупрозрачные контуры.<br />
<strong>grid</strong> &#8211; в качестве значения принимает массив элементов [x, y], где x и y – числа, определяющие шаг сетки. Изменение размеров будет происходить дискретно, в соответствии с заданными значениями. По умолчанию установлено значение false.<br />
<strong>handles</strong> &#8211; принимает строку в качестве значения. По умолчанию установлено значение &#8216;e, s, se&#8217;. Можно использовать любые из следующих обозначений &#8216;n, e, s, w, ne, se, sw, nw, all&#8217; или их комбинации.<br />
<strong>helper</strong> &#8211; по умолчанию опция имеет значение false. Принимает строку с названием css-класса, который добавляется к области, демонстрирующей во время перемещения размеры, в которые установится элемент.<br />
<strong>maxHeight</strong> &#8211; число, определяющее максимальную высоту, до которой можно изменять размеры элемента. По умолчанию – null.<br />
<strong>maxWidth</strong> &#8211; число, определяющее максимальную ширину, до которой можно изменять размеры элемента. По умолчанию – null.<br />
<strong>minHeight</strong> &#8211; число, определяющее минимальную высоту, до которой можно изменять размеры элемента. По умолчанию – 10.<br />
<strong>minWidth</strong> &#8211; число, определяющее минимальную ширину, до которой можно изменять размеры элемента. По умолчанию – 10.</p>
<p>Плагин Resizable, как и остальные плагины из UI jQuery, может реагировать на события. Он имеет три опции, в которых можно определить callback-функции, вызываемые при наступлении соответствующего события.</p>
<p>Опция <strong>start</strong> &#8211; событие <em>resizestart</em> наступает при начале изменения размеров элемента.<br />
Опция <strong>resize</strong> &#8211; событие <em>resize</em> наступает постоянно во время изменения размеров элемента.<br />
Опция <strong>stop</strong> &#8211; событие <em>resizestop</em> наступает при окончании изменения размеров элемента.</p>
<p>Однако на примере все равно лучше:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#resizable&quot;).resizable({
    ghost: true,
    stop:  function(event, ui) {
      alert(&quot;Событие &quot; + event.type);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_resizable/example-three.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>В этом примере мы определили в опции stop callback-функцию, которая будет вызвана в момент окончания изменения размеров элемента. Функция может принимать два аргумента. Первый аргумент – это объект события, к свойству type которого можно легко обратиться. Теперь, при окончании изменения размеров выбранного элемента мы получим окно предупреждения, в котором будет выведено название события, вызвавшего эту функцию.<br />
Что касается второго аргумента, то это объект, в свойствах которого содержится весьма полезная информация. Как можно обратиться к некоторым свойствам этого объекта показано в следующем примере:</p>
<pre class="brush: jscript;">$(function(){
 $(&quot;#resizable&quot;).resizable({
  ghost: true,
  stop:  function(event, ui) {
   alert(&quot;Начальные размеры: &quot; + ui.originalSize.width +
      &quot;x&quot; + ui.originalSize.height +
      &quot;px\nКонечные размеры: &quot; + ui.size.width +
      &quot;x&quot; + ui.size.height + &quot;px&quot;);
  }
 });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_resizable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Здесь мы обращаемся к свойствам объекта ui originalSize и size. Оба свойства также представляют собой объекты, в свойствах width и height которых сохраняются значения ширины и высоты начальных размеров элемента (originalSize) и его конечных размеров (size).</p>
<p>Перечислим основные свойства специального объекта ui:<br />
<strong>ui.helper</strong> – объект, представляющий изменяемый элемент;<br />
<strong>ui.size</strong> – объект, в свойствах width и height которого сохраняются текущие ширина и высота элемента;<br />
<strong>ui.originalSize</strong> – объект, в свойствах width и height которого сохраняются ширина и высота элемента до изменения его размеров;<br />
<strong>ui.position</strong> – объект, в свойствах top и left которого сохраняется текущее положение элемента;<br />
<strong>ui.originalPosition</strong> &#8211; объект, в свойствах top и left которого сохраняется положение элемента до изменения его размеров;</p>
<p>Кроме перечисленных выше возможностей, плагин имеет несколько методов, с помощью которых можно управлять им уже после инициализации. Добавим в HTML-разметку пару кнопок:</p>
<pre class="brush: xml;">&lt;button id=&quot;getter&quot;&gt;Get Option&lt;/button&gt;
&lt;button id=&quot;setter&quot;&gt;Set Option&gt;/button&gt;</pre>
<p>и попробуем использовать метод .resizable(&#8216;option&#8217;, optionName, [value]):</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#resizable&quot;).resizable({
    animate: true,
    ghost: true,
    animateDuration: 500
  });
  $(&quot;#getter&quot;).click(function(){
    alert($(&quot;#resizable&quot;).resizable(&quot;option&quot;, &quot;animateDuration&quot;));
  });
  $(&quot;#setter&quot;).click(function(){
    $(&quot;#resizable&quot;).resizable(&quot;option&quot;, &quot;animateDuration&quot;, 3000);
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_resizable/example-five.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Используем кнопки с идентификаторами #getter и #setter с которыми свяжем событие click. При щелчке мышью на кнопке #getter будем вызывать метод .resizable(&#8216;option&#8217;, optionName, [value]) с двумя аргументами, получая, таким образом, текущее значение опции animateDuration. А при щелчке мышью на кнопке #setter вызовем тот же самый метод .resizable(&#8216;option&#8217;, optionName, [value]), но уже с тремя аргументами. В качестве третьего аргумента передадим значение, которое мы хотим установить для опции animateDuration.</p>
<p>Все доступные методы плагина Resizable:<br />
<strong>destroy</strong> &#8211; .resizable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Resizable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .resizable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .resizable(&#8216;enable&#8217;) разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .resizable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.</p>
<blockquote><p>Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_resizable/ui_resizable.zip">архиве</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/109.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; плагин Droppable</title>
		<link>http://www.linkexchanger.su/2009/108.html</link>
		<comments>http://www.linkexchanger.su/2009/108.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 05:25:13 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[droppable]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/108.html</guid>
		<description><![CDATA[Плагин Droppable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Droppable позволяет делать выбранные элементы веб-страницы &#171;сбрасываемыми&#187; в некий целевой элемент. Естественно, что для того чтобы быть &#171;сброшенным&#187;, элемент должен быть перемещаемым, а целевой элемент должен уметь принимать &#171;сбрасываемые&#187; элементы. Наведите указатель мыши [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Droppable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Droppable позволяет делать выбранные элементы веб-страницы &laquo;сбрасываемыми&raquo; в некий целевой элемент. Естественно, что для того чтобы быть &laquo;сброшенным&raquo;, элемент должен быть перемещаемым, а целевой элемент должен уметь принимать &laquo;сбрасываемые&raquo; элементы. Наведите указатель мыши на черный квадрат, нажмите левую клавишу мыши, переместите его внутрь зеленого квадрата и отпустите.<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_droppable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="280" width="418"></iframe><br />
А теперь разберемся, как это сделать самостоятельно.<span id="more-108"></span></p>
<p>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Droppable</strong> и видим, что вместе с ним отметились <strong>чекбоксы UI Core и Draggable</strong>. Работа плагина Droppable зависит от них, поэтому они необходимы.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>В разделе HEAD подключаем несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/trontastic/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Сначала мы подключили файл стилей css/trontastic/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагинов Droppable и Draggable (ведь прежде, чем «сбросить» элемент, его надо переместить).</p>
<p>Пример HTML-разметки:</p>
<pre class="brush: xml;">&lt;div id=&quot;draggable&quot; class=&quot;ui-widget-content&quot;&gt;
&lt;p&gt;Drag me to my target&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;droppable&quot; class=&quot;ui-widget-header&quot;&gt;
&lt;p&gt;Drop here&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;</pre>
<p>Элемент с идентификатором #draggable будет у нас перемещаемым, элемент с идентификатором #droppable &#8211; целевым, в него можно будет &laquo;сбросить&raquo; перемещаемый элемент. Наконец, элемент с идентификатором #result будет служить для придания наглядности примеру.</p>
<p>Теперь смотрим javascript-код:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
  $(&quot;#droppable&quot;).droppable({
    drop: function(){
      $(&quot;#result&quot;).append(&quot;Dropped!&quot;);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы сразу же определили callback-функцию в опции drop. Это сделано в первую очередь для наглядности. Как только перемещаемый блок div будет «сброшен» в целевой блок div, в элемент с идентификатором #result будет добавлен соответствующий текст.</p>
<p>Но попробуем передать плагину еще пару каких-либо опций.</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
  $(&quot;#droppable&quot;).droppable({
    activeClass: &quot;active&quot;,
    hoverClass: &quot;hover&quot;,
    drop: function(){
      $(&quot;#result&quot;).append(&quot;Dropped!&quot;);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Передав плагину Droppable опции activeClass и hoverClass, в которых указали имена классов, мы добились того, чтобы все время в процессе движения перемещаемого элемента, у элемента целевого присутствовала красная рамка, а в тот момент, когда перемещаемый элемент оказывается над целевым, рамка поменяет свой цвет на синий.</p>
<p>Плагин Droppable может принимать семь опций:<br />
<strong>accept</strong> &#8211; в опции может быть указан селектор или функция. Все перемещаемые элементы, которые будут выбраны этим селектором, получат возможность быть «сброшенными» в элемент, к которому применена функциональность плагина Droppable. Если в этой опции определена функция, то она будет вызываться для каждого перемещаемого элемента на странице (передаваемого в функцию как первый аргумент), с целью применения пользовательского фильтра. Функция должна будет возвратить true, если элемент должен получить возможность быть «сброшенным». По умолчанию – *.<br />
<strong>activeClass</strong> &#8211; если в этой опции определить имя класса, то он будет добавлен к целевому элементу в момент начала перемещения элемента, который должен быть «сброшен». По умолчанию – false.<br />
<strong>addClasses</strong> &#8211; по умолчанию опция имеет значение true. Если установить false, то это предотвратит добавление класса с именем ui-droppable. Это может потребоваться в целях оптимизации при вызове .droppable() для нескольких сотен элементов.<br />
<strong>greedy</strong> &#8211; если для этой опции установлено значение true, это предотвращает всплывание события, т.е. если «сброс» был выполнен во внутренний элемент, в то время как его родитель тоже может принимать «сбрасываемый» элемент, события drop для элемента-родителя не произойдет. По умолчанию опция имеет значение false.<br />
<strong>hoverClass</strong> &#8211; если в этой опции определить имя класса, то он будет добавлен к целевому элементу в тот момент, когда перемещаемый элемент окажется над целевым элементом. По умолчанию – false.<br />
<strong>scope</strong> &#8211; по умолчанию эта опция имеет значение &#8216;default&#8217; и применяется в дополнение к опции accept. В опции может быть определено любое значение в виде строки и все перемещаемые элементы, с таким же значение соответствующей опции, будут иметь возможность «сброса» в целевой элемент.<br />
<strong>tolerance</strong> &#8211; опция определяет, в какой момент необходимо произвести «сброс» элемента, при нахождении его над целевым элементом. По умолчанию имеет значение &#8216;intersect&#8217;, что определит «сброс» в тот момент, когда перемещаемый элемент перекрыл целевой как минимум на 50%.  Другие возможные значения: <em>fit</em> – перемещаемый элемент должен полностью войти в целевой элемент; <em>pointer</em> – указатель мыши должен войти в целевой элемент; <em>touch</em> – перемещаемый элемент должен перекрыть целевой элемент на любую самую малую величину;</p>
<p>Как и другие плагины, входящие в состав UI jQuery, плагин Droppable умеет реагировать на некоторые события. Опций, в которых можно определить callback-функции, вызываемые при наступлении соответствующего события, всего пять.  В самом первом примере мы уже использовали опцию drop, но если вы откроете <a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-three.html" target="_blank">этот пример</a>, увидите в действии и остальные.</p>
<p>Опция <strong>activate</strong> &#8211; событие <em>dropactivate</em> происходит в момент начала движения перемещаемого элемента.<br />
Опция <strong>deactivate</strong> &#8211; событие <em>dropdeactivate</em> происходит в момент окончания движения перемещаемого элемента, независимо от того, был ли он «сброшен» в целевой элемент или нет.<br />
Опция <strong>over</strong> &#8211; событие <em>dropover</em> происходит в момент входа перемещаемого элемента в пределы целевого элемента.<br />
Опция <strong>out</strong> &#8211; событие <em>dropout</em> происходит в момент выхода перемещаемого элемента за пределы целевого элемента.<br />
Опция <strong>drop</strong> &#8211; событие <em>drop</em> происходит в момент «сброса» перемещаемого элемента в целевой элемент.</p>
<p>Надо отметить, что любая callback-функция, вызываемая при наступлении какого-либо события может принимать два аргумента. Первый аргумент – объект события, второй – специальный объект ui, в свойствах которого содержится следующая информация:<br />
<strong>ui.helper</strong> – объект, характеризующий перемещаемый элемент;<br />
<strong>ui.position</strong> – объект, в свойствах top и left которого содержится информация о положении перемещаемого элемента относительно родительского элемента;<br />
<strong>ui.offset</strong> – объект, в свойствах top и left которого содержится информация об абсолютном положении перемещаемого элемента;</p>
<p>Плагин Droppable имеет четыре метода, с помощью которых можно управлять им уже после инициализации. Добавим в разметку несколько кнопок, чтобы по клику на них вызывать нужные методы плагина:</p>
<pre class="brush: xml;">&lt;button id=&quot;disable&quot;&gt;Disable&lt;/button&gt;
&lt;button id=&quot;enable&quot;&gt;Enable&lt;/button&gt;
&lt;button id=&quot;destroy&quot;&gt;Destroy&lt;/button&gt;</pre>
<p>И теперь познакомимся с некоторыми из методов на примере:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
  $(&quot;#droppable&quot;).droppable({
    drop: function(event, ui){
      $(&quot;#result&quot;).append(event.type);
    }
  });
  $(&quot;#disable&quot;).click(function(){
    $(&quot;#droppable&quot;).droppable(&quot;disable&quot;);
  });
  $(&quot;#enable&quot;).click(function(){
    $(&quot;#droppable&quot;).droppable(&quot;enable&quot;);
  });
  $(&quot;#destroy&quot;).click(function(){
    $(&quot;#droppable&quot;).droppable(&quot;destroy&quot;);
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>С кнопками, имеющими идентификаторы #disable, #enable и #destroy связаны обработчики события click, которые вызывают одноименные методы плагина.<br />
Используя .droppable(&laquo;disable&raquo;) можно временно удалить функциональность плагина из выбранного элемента, а с помощью .droppable(&laquo;enable&raquo;) – восстановить ее. Использование  .droppable(&laquo;destroy&raquo;) приведет к окончательному удалению функциональности. Восстановить ее можно будет только перезагрузкой страницы.</p>
<p><strong>destroy</strong> &#8211; .droppable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Droppable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .droppable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .droppable(&#8216;enable&#8217;)разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .droppable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.</p>
<blockquote><p>Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_droppable/ui_droppable.zip">архиве</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/108.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; плагин Draggable</title>
		<link>http://www.linkexchanger.su/2009/107.html</link>
		<comments>http://www.linkexchanger.su/2009/107.html#comments</comments>
		<pubDate>Mon, 05 Oct 2009 11:27:16 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/107.html</guid>
		<description><![CDATA[Плагин Draggable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Draggable позволяет делать выбранные элементы веб-страницы перемещаемыми с помощью указателя мыши. Наведите указатель мыши на зеленый квадрат, нажмите левую клавишу мыши и попробуйте перемещать его.

А теперь посмотрите, насколько легко это реализовать&#8230;.
Для начала посетим [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Draggable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Draggable позволяет делать выбранные элементы веб-страницы перемещаемыми с помощью указателя мыши. Наведите указатель мыши на зеленый квадрат, нажмите левую клавишу мыши и попробуйте перемещать его.<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_draggable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="180" width="418"></iframe><br />
А теперь посмотрите, насколько легко это реализовать&#8230;.<span id="more-107"></span><br />
Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Draggable</strong> и видим, что вместе с ним отметился <strong>чекбокс UI Core</strong>. Работа плагина Draggable зависит от него, поэтому он необходим.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>Сначала в разделе <strong>HEAD</strong> подключаем несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/le-frog/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Итак, сначала мы подключили файл стилей css/le-frog/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагина Draggable (на самом деле для использования в примерах этой статьи там содержится еще и функциональность плагинов Droppable и Sortable).</p>
<p>Смотрим HTML-разметку. Пусть у нас она будет выглядеть так:</p>
<pre class="brush: xml;">&lt;div id=&quot;draggable&quot; class=&quot;ui-widget-content&quot;&gt;
  &lt;p&gt;Drag me&lt;/p&gt;
&lt;/div&gt;</pre>
<p>Связываем функциональность плагина Draggable с выбранным элементом:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Пока мы использовали плагин Draggable с настройками по умолчанию. Но он может принимать более 20 различных опций, которые помогают очень гибко настроить его под конкретные условия использования.<br />
Попробуем передать плагину несколько настроек:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable({
    cursor: &quot;move&quot;,
    revert: true,
    revertDuration: 3000
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Здесь мы изменили вид курсора во время перемещения элемента, и добились того, что по окончании перемещения элемент самостоятельно вернется в свое начальное положение в течение 3 секунд.<br />
Остальные опции используются аналогичным образом, самое главное &#8211; знать их название и понимать какая за что отвечает.</p>
<p><strong>addClasses</strong> &#8211; по умолчанию эта опция имеет значение true. Если установить значение false, то это предотвратит добавление класса ui-draggable к перемещаемым элементам. Это может потребоваться из соображений оптимизации при вызове .draggable() например, для нескольких сотен элементов.<br />
<strong>appendTo</strong> &#8211; по умолчанию эта опция имеет значение &#8216;parent&#8217;. В ней можно передать селектор jQuery или элемент, который будет использован в качестве контейнера для объекта, представляющего перемещаемый элемент во все время его перемещения.<br />
<strong>axis</strong> &#8211; вынуждает перетаскиваемый элемент перемещаться только по оси x или только по оси y. Значение по умолчанию false, что позволяет элементу перемещаться свободно.<br />
<strong>cancel</strong> &#8211; по умолчанию эта опция имеет значение &#8216;input, option&#8217;. Если эти элементы находятся внутри перемещаемого элемента, то перемещаемый элемент нельзя захватить, при нахождении указателя мыши над определенными в этой опции элементами. Для выбора элементов используется селектор jQuery.<br />
<strong>connectToSortable</strong> &#8211; разрешает «сброс» перемещаемых элементов в сортируемый (sortable) список. При этом «сброшенный» элемент становится частью списка. В качестве значения указывается селектор jQuery. По умолчанию имеет значение false. Для корректной работы необходимо дополнительно использовать опцию helper со значением &#8216;clone&#8217;.<br />
<strong>containment</strong> &#8211; ограничивает перемещение внутри определенного элемента или области. В качестве значения может принимать селектор jQuery, элемент, строку или массив. Примеры возможных значений: &#8216;parent&#8217;, &#8216;document&#8217;, &#8216;window&#8217;, [x1, y1, x2, y2].<br />
<strong>cursor</strong> &#8211; строка, в которой может быть передано css значение, определяющее значок для курсора в процессе перетаскивания элемента. По умолчанию – auto.<br />
<strong>cursorAt</strong> &#8211; при перемещении элемента устанавливает курсор в определенную позицию. Например, значение {left: 5, top: 10}, при перемещении установит курсор в 10 пикселах от верхнего края и 5 пикселах от левого края.<br />
<strong>delay</strong> &#8211; отсрочка начала времени перемещения элемента в миллисекундах. Опция используется для того, чтобы предотвратить нежелательное перемещение элемента во время случайного щелчка по нему. По умолчанию имеет значение 0.<br />
<strong>distance</strong> &#8211; расстояние в пикселах, на которое должен переместиться курсор при удерживаемой в нажатом положении левой клавиши мыши прежде, чем начнется перемещение элемента. Опция используется для того, чтобы предотвратить нежелательное перемещение элемента во время случайного щелчка по нему. По умолчанию имеет значение 1.<br />
<strong>grid</strong> &#8211; заставляет перетаскиваемый элемент перемещаться дискретно, по сетке, определяемой массивом передаваемых в опцию значений. Значение по умолчанию false, что позволяет элементу перемещаться свободно. Пример передаваемого значения &#8211; [10, 10].<br />
<strong>handle</strong> &#8211; в этой опции можно определить элемент, находящийся внутри перемещаемого элемента, при нахождении над которым указателя мыши будет возможен захват перемещаемого элемента. Для выбора элементов можно использовать селектор jQuery.<br />
<strong>helper</strong> &#8211; возможные значения опции &#8211; &#8216;original&#8217;, &#8216;clone&#8217;, Function. По умолчанию установлено значение &#8216;original&#8217; – визуально наблюдается перемещении самого элемента. При использовании значения &#8216;clone&#8217; перемещаться будет клон элемента, а сам элемент при этом остается на своей позиции. В опции можно определить функцию. Функция обязательно должна возвращать DOM элемент.<br />
<strong>iframeFix</strong> &#8211; по умолчанию установлено значение false. Если установить значение true, будет предотвращен перехват события mousemove во время перемещения элемента при прохождении указателя мыши над iframe. В качестве значения может быть использован селектор jQuery – при этом предотвращение перехвата будет производиться только при прохождении указателя мыши над выбранными iframe. Опция бывает полезна при использовании совместно например с cursorAt.<br />
<strong>opacity</strong> &#8211; устанавливает значение css-свойства opacity для элемента, находящегося в процессе перемещения. По умолчанию установлено значение false, что соответствует полной непрозрачности.<br />
<strong>refreshPositions</strong> &#8211; по умолчанию используется значение false. При значении true позиция «сброса» элемента будет пересчитываться при каждом событии mousemove. Использовать с осторожностью! Такой подход может помочь создать очень динамичное приложение, но безусловно снизит производительность.<br />
<strong>revert</strong> &#8211; значение по умолчанию – false. Если установить значение true, то элемент возвратится на свою исходную позицию после окончания перетаскивания. Также можно передать значения в виде строки. Возможные значения &#8211; &#8216;valid&#8217; или &#8216;invalid&#8217;. Эти значения используются в случае, если перемещаемый элемент будет «сброшен» в какой-либо целевой элемент. При использовании значения &#8216;valid&#8217; перемещаемый элемент возвратится в предыдущую позицию только в том случае, если был «сброшен» в целевой элемент. При использовании значения &#8216;invalid&#8217; не возвратится в предыдущую позицию только в том случае, если он был «сброшен» в целевой элемент.<br />
<strong>revertDuration</strong> &#8211; длительность эффекта возвращения элемента на исходную позицию, в миллисекундах. По умолчанию имеет значение 500. Опция игнорируется, если опция revert имеет значение false.<br />
<strong>scope</strong> &#8211; значением этой опции является строка. По умолчанию установлено значение &#8216;default&#8217;. Перемещаемые элементы, имеющие в опции scope точно такое же значение, как и значение опции scope для элементов с функциональность droppable, будут приниматься этими элементами. По сути, дополняет опцию accept плагина Droppable.<br />
<strong>scroll</strong> &#8211; по умолчанию установлено значение true – при перемещении элемента к краю области просмотра, она автоматически прокручивается бесконечно. Если установить значение false, эта возможность будет запрещена.<br />
<strong>scrollSensitivity</strong> &#8211; число, определяющее расстояние в пикселах от края области просмотра, после которого она начинает прокручиваться. Расстояние определяется относительно указателя мыши, а не перемещаемого элемента. По умолчанию установлено значение 20.<br />
<strong>scrollSpeed</strong> &#8211; число, определяющее скорость, с которой прокручивается область просмотра при приближении указателя мыши к ее краю на расстояние определенное в опции scrollSensitivity. По умолчанию установлено значение 20.<br />
<strong>snap</strong> &#8211; по умолчанию установлено значение false. Если установить значение true (что эквивалентно &#8216;.ui-draggable&#8217;, поскольку значение может определяться также селектором jQuery), то перемещаемый элемент будет «прилипать» к краям выбранных элементов при прохождении около них.<br />
<strong>snapMode</strong> &#8211; опция определяет, как именно перемещаемый элемент будет «прилипать» к выбранным элементам. Например, только к внешним или только к внутренним сторонам элементов. Возможные значения &#8216;inner&#8217;, &#8216;outer&#8217;, &#8216;both&#8217;. Любое значение игнорируется при snap: false. По умолчанию установлено значение &#8216;both&#8217;.<br />
<strong>snapTolerance</strong> &#8211; расстояние в пикселах от перемещаемого элемента до выбранного, при котором произойдет «прилипание». По умолчанию установлено значение 20. Любое значение игнорируется при snap: false.<br />
<strong>stack</strong> &#8211; объект, с помощью которого осуществляется автоматический контроль за свойством z-index определенной группы перемещаемых элементов, всегда помещая перемещаемый элемент поверх остальных. Значение свойства &#8216;group&#8217; определяет jQuery селектор. Дополнительно можно определить свойство &#8216;min&#8217;, число ниже которого значение z-index опуститься не сможет. Например:  $(&#8216;.selector&#8217;).draggable({ stack: { group: &#8216;.selector&#8217;, min: 50 } });<br />
<strong>zIndex</strong> &#8211; число, определяющее значение свойства z-index перемещаемого элемента. По умолчанию false.</p>
<p>Кроме возможности гибкой настройки плагина Draggable, есть возможность заставить его реагировать на некоторые события. Вот пример:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable({
    cursor: &quot;move&quot;,
    stop: function(event, ui) {
  	  alert(&quot;Событие: &quot; + event.type +
  	        &quot;\n\ntop: &quot; + ui.offset.top +
  	        &quot; px\nleft: &quot; + ui.offset.left +
  	        &quot; px&quot;);
  	}
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-three.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы определили в опции stop callback-функцию. Функция принимает два аргумента – объекты event и ui. На простом примере показано, каким образом можно обратиться к свойствам этих объектов. В итоге, при окончании перемещения элемента, в окне предупреждения мы увидим информацию о типе наступившего события &#8211; dragstop, и текущее абсолютное положение элемента на странице.</p>
<p>Опций, связанных с событиями только три:<br />
Опция <strong>start</strong> &#8211; событие <em>dragstart</em> наступает каждый раз при начале перемещения элемента.<br />
Опция <strong>drag</strong> &#8211; событие <em>drag</em> наступает все время, пока элемент находится в процессе перемещения.<br />
Опция <strong>stop</strong> &#8211; событие <em>dragstop</em> наступает каждый раз при завершении перемещения элемента.</p>
<p>Любая callback-функция, определенная в опциях start, drag или stop принимает два аргумента – event и ui. Объект event – это объект события, а объект ui – это специальный объект, в свойствах которого содержится следующая информация:<br />
<strong>ui.helper</strong> – объект, характеризующий элемент, находящийся в процессе перемещения;<br />
<strong>ui.position</strong> – объект, в свойствах top и left которого содержится информация о положении перемещаемого элемента относительно родительского элемента;<br />
<strong>ui.offset</strong> – объект, в свойствах top и left которого содержится информация об абсолютном положении перемещаемого элемента;</p>
<p>Нам осталось познакомиться с методами плагина Draggable. Но для этого нам понадобится добавить в HTML-разметку пару кнопок. Вот так:</p>
<pre class="brush: xml;">&lt;button id=&quot;getOption&quot;&gt;Get Option&lt;/button&gt;
&lt;button id=&quot;setOption&quot;&gt;Set Option&lt;/button&gt;</pre>
<p>В следующем примере продемонстрировано как получать и устанавливать значения опций плагина после его инициализации:</p>
<pre class="brush: jscript;">$(function(){
 $(&quot;#draggable&quot;).draggable({
  cursor: &quot;move&quot;
 });
 $(&quot;#getOption&quot;).click(function(){
  alert($(&quot;#draggable&quot;).draggable(&quot;option&quot;,&quot;grid&quot;));
 });
 $(&quot;#setOption&quot;).click(function(){
  $(&quot;#draggable&quot;).draggable(&quot;option&quot;,&quot;grid&quot;,[50,50]);
 });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы связали с кнопками Get Option и Set Option событие click. При щелчке на кнопке Get Option мы вызовем метод option, название которого указываем в первом аргументе, а во втором аргументе передаем название опции, значение которой мы хотели бы получить. В итоге мы увидим окно предупреждения, в котором будет показано значение false, поскольку при инициализации эта опция не была определена, а по умолчанию она имеет именно такое значение.<br />
Попробуйте перетаскивать элемент с помощью мыши – он будет плавно перемещаться в любых направлениях.</p>
<p>Сделаем щелчок на кнопке Set Option, снова вызывая метод option, но теперь мы передаем три аргумента. Первый – название метода, второй – название опции, значение которой мы хотим изменить, и третий аргумент – новое значение опции. Таким образом, передав опции grid значение [50,50] мы заставим элемент перемещаться дискретно, вдоль сетки с шагом 50х50 пикселей.</p>
<p>Доступные методы плагина Draggable:<br />
<strong>destroy</strong> &#8211; .draggable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Draggable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .draggable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .draggable(&#8216;enable&#8217;) разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .draggable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.</p>
<blockquote><p>Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_draggable/ui_draggable.zip">архиве</a>.</p></blockquote>
<p>Для тех, кто смог все это прочитать до конца (а также для тех, кто сразу прокрутил страницу вниз) сообщаю, что в архиве Вы найдете и еще один пример, где показано как можно реализовать перемещение и &laquo;сброс&raquo; элемента несортируемого списка в другой, сортируемый список.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/107.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Как использовать виджет Accordion в качестве меню?</title>
		<link>http://www.linkexchanger.su/2009/104.html</link>
		<comments>http://www.linkexchanger.su/2009/104.html#comments</comments>
		<pubDate>Tue, 18 Aug 2009 07:27:35 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[accordion]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[аккордеон]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/104.html</guid>
		<description><![CDATA[Что такое Accordion наверное все знают, но если кто не знает, тому лучше сначала прочитать статью jQuery UI &#8211; виджет Accordion, в ней довольно подробно все рассказано. А сегодняшняя статья написана благодаря довольно многочисленным вопросам и моему обещанию рассказать, как, используя accordion, сделать на его основе меню для сайта. Естественно, что при переходе по ссылке [...]]]></description>
			<content:encoded><![CDATA[<p>Что такое Accordion наверное все знают, но если кто не знает, тому лучше сначала прочитать статью <a href="http://www.linkexchanger.su/2009/93.html">jQuery UI &#8211; виджет Accordion</a>, в ней довольно подробно все рассказано. А сегодняшняя статья написана благодаря довольно многочисленным вопросам и моему обещанию рассказать, как, используя accordion, сделать на его основе меню для сайта. Естественно, что при переходе по ссылке открытая секция аккордеона должна оставаться открытой и активный пункт меню должен быть как-то выделен&#8230;.<span id="more-104"></span></p>
<p>Сразу приведу <a href="http://www.linkexchanger.su/examples_2009/accordionMenu/ac_menu.html" target="_blank">пример</a> и выложу <a href="http://www.linkexchanger.su/examples_2009/accordionMenu/accordionMenu.zip">архив демо</a>, а то меня, не без оснований конечно, обвиняли в отсутствии демо в статьях про jQuery UI. Поскольку ничего особенно сложного в этом решении нет, то я буду краток &#8211; только код, пример и минимум необходимых пояснений.</p>
<p>Итак, сначала мы делаем все в точности так же, как написано в статье <a href="http://www.linkexchanger.su/2009/93.html">jQuery UI &#8211; виджет Accordion</a>. Т.е. подключаем необходимые файлы к HTML-странице. Здесь же внесем первое дополнение. Для того, чтобы иметь возможность запоминать состояние секций аккордеона, нам потребуется подключить еще один небольшой, но весьма полезный плагин &#8211; jQuery Cookie.</p>
<pre class="brush: xml;">&lt;script src=&quot;js/jquery.cookie.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Поиметь свежую версию этого плагина можно на <a href="http://plugins.jquery.com/project/Cookie">http://plugins.jquery.com/project/Cookie</a>.</p>
<p>Теперь приведу пример HTML-разметки меню-аккордеона.</p>
<pre class="brush: xml;">
&lt;div id=&quot;accordion&quot;&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 1&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?1-1&quot;&gt;Пункт меню 1-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?1-2&quot;&gt;Пункт меню 1-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?1-3&quot;&gt;Пункт меню 1-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 2&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?2-1&quot;&gt;Пункт меню 2-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?2-2&quot;&gt;Пункт меню 2-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?2-3&quot;&gt;Пункт меню 2-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 3&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?3-1&quot;&gt;Пункт меню 3-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?3-2&quot;&gt;Пункт меню 3-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?3-3&quot;&gt;Пункт меню 3-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 4&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?4-1&quot;&gt;Пункт меню 4-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?4-2&quot;&gt;Пункт меню 4-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?4-3&quot;&gt;Пункт меню 4-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</pre>
<p>Ничего загадочного тут и вовсе нет. Что еще? Добавим немного стилей, чтобы выделять активный пункт меню. Например так:</p>
<pre class="brush: css;">a.open { color: #f00;}</pre>
<p>т.е. в примере просто выделяем текст ссылки в меню красным цветом.</p>
<p>А теперь самое интересное &#8211; javascript-код:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#accordion&quot;).accordion({
    navigation: true
  });
  $(&quot;#accordion li a&quot;).click(function(){
    $.cookie(&quot;openItem&quot;, $(this).attr(&quot;href&quot;));
  });
  $(&quot;#accordion li a[href$=`&quot; + $.cookie(&quot;openItem&quot;) +
  &quot;`]&quot;).addClass(&quot;open&quot;);
});
&lt;/script&gt;</pre>
<p>И здесь ничего сложного! Отыскали нужный элемент по идентификатору <strong>#accordion</strong>, применили к нему возможности плагина. Из опций передали только одну, но в нашем случае необходимую опцию <strong>navigation</strong>, которой присвоили значение <strong>true</strong>. Это обеспечит нам открытие нужной секции аккордеона при переходе по ссылке.</p>
<p>На следующем шаге необходимо обрабатывать щелчок мышкой по пункту меню, чтобы поставить соответствующую куку. Что мы и делаем &#8211; находим все элементы a внутри li, внутри нашего аккордеона, связываем с ними событие click, по которому будет вызвана функция-обработчик.</p>
<p>Тут нам пригодятся возможности плагина jQuery Cookie. Мы устанавливаем куку с именем <strong>openItem</strong>, и значением, которое получаем из атрибута href той ссылки, по которой был совершен клик.</p>
<p>И последний шаг &#8211; при загрузке страницы мы должны прочитать куку (если она конечно есть) и в соответствии с ее значением &laquo;подсветить&raquo; нужный пункт меню. Делаем это &#8211; ищем нужный пункт меню выбирая элемент a внутри li аккордеона. Но не просто, а значение атрибута href которого соответствует значению, сохраненному в куке.</p>
<blockquote><p>Знак $ используем потому, что некоторые браузеры возвращают значения атрибута href по разному. Некоторые отдают абсолютный путь, некоторые &#8211; относительный. Чтобы исключить эту неоднозначность мы ищем такое значение атрибута href, которое заканчивается одинаково со значением, сохраненным в куке.</p></blockquote>
<p>Если такая ссылка будет найдена, то с помощью метода <strong>addClass</strong> мы добавим ей класс <strong>open</strong>, что заставит ее &laquo;покраснеть&raquo;.</p>
<p>Собственно это все, больше тут рассказывать не о чем&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/104.html/feed</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; виджет Datepicker</title>
		<link>http://www.linkexchanger.su/2009/103.html</link>
		<comments>http://www.linkexchanger.su/2009/103.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 04:58:09 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[datepicker]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/103.html</guid>
		<description><![CDATA[jQuery UI &#8211; надстройка над JavaScript-библиотекой jQuery. Она поможет создавать по настоящему интерактивные веб-приложения. Сегодня мы познакомимся с виджетом Datepicker.

Datepicker – это интерактивный календарь, который связан с полем ввода. Щелчок в поле ввода приводит к тому, что в отдельном слое открывается небольшой календарь. Выбираете нужную дату и готово – дата занесена в поле ввода.
Для начала [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery UI &#8211; надстройка над JavaScript-библиотекой jQuery. Она поможет создавать по настоящему интерактивные веб-приложения. Сегодня мы познакомимся с виджетом Datepicker.<br />
<img src="http://www.linkexchanger.su/wp-content/uploads/2009/06/datepicker.jpg" alt="Виджет Datepicker" /><br />
Datepicker – это интерактивный календарь, который связан с полем ввода. Щелчок в поле ввода приводит к тому, что в отдельном слое открывается небольшой календарь. Выбираете нужную дату и готово – дата занесена в поле ввода.<span id="more-103"></span></p>
<p>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong> , чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Datepicker</strong> и <strong>чекбокс UI Core</strong>.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив. Можно испытать пример как есть, но интереснее создать свою HTML-страничку, где сначала в разделе HEAD подключить несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/ui-lightness/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/i18n/jquery-ui-i18n.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Сначала мы подключили файл стилей одной из многочисленных тем оформления. Кроме этого мы подключили файл библиотеки и файл, в котором заключена функциональность UI Core и виджета Datepicker. И наконец, последний файл обеспечивает локализацию виджета для нужного языка. Найти его можно в полученном архиве, в папке /development-bundle/ui/i18n</p>
<p>Из разметки потребуется минимум &#8211; просто элемент input:</p>
<pre class="brush: xml;">&lt;input  id=&quot;datepicker&quot; type=&quot;text&quot; /&gt;</pre>
<p>Кстати, если Вы хотите, чтобы календарь не появлялся по щелчку в элементе input, а был всегда виден &#8211; просто используйте обычный элемент div:</p>
<pre class="brush: xml;">&lt;div  id=&quot;datepicker&quot;&gt;&lt;div&gt;</pre>
<p>Связываем виджет Datepicker с нашей HTML-разметкой:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#datepicker&quot;).datepicker();
});
&lt;/script&gt;</pre>
<p>Отлично! С настройками по умолчанию все понятно, но нам хотелось бы иметь календарь на русском языке (или, к примеру, на украинском). Давайте это сделаем:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $.datepicker.setDefaults(
        $.extend($.datepicker.regional[&quot;ru&quot;])
  );
  $(&quot;#datepicker&quot;).datepicker();
});
&lt;/script&gt;</pre>
<p>Приведенный в примере код обеспечит поддержку русского языка, а если Вы замените ru на uk (интересно, почему не на ua?) то получите календарь уже на украинском языке.</p>
<p>Но вероятно Вам понадобится изменить какие-то настройки, чтобы использовать Datepicker для решения своих задач. Давайте попробуем это сделать.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $.datepicker.setDefaults(
        $.extend($.datepicker.regional[&quot;ru&quot;])
  );
  $(&quot;#datepicker&quot;).datepicker({
    minDate: &quot;-30&quot;,
    maxDate: &quot;+1m +1w +3d&quot;
  });
});
&lt;/script&gt;</pre>
<p>Мы передали виджету две опции, названия которых говорят сами за себя – мы установили минимальную и максимальную дату, которую можно выбрать в календаре. Безусловно, полезные опции, но таких опций гораздо больше, а принцип их использования ничем не отличается от только что рассмотренного принципа. Полный список возможных опций приведен ниже:</p>
<p><strong>altField</strong> &#8211; jQuery селектор для другого поля, которое должно быть обновлено, как только будет выбрана дата в Datepicker. Формат даты в этом дополнительном поле устанавливается с помощью опции altFormat.</p>
<p><strong>altFormat</strong> &#8211; формат даты, который будет использоваться для опции altField. Эти настройки позволяют показывать пользователю один формат даты, тогда как для вычислений может использоваться другой формат. Полный список возможных форматов можно найти на<br />
<a href="docs.jquery.com/UI/Datepicker/formatDate">http://docs.jquery.com/UI/Datepicker/formatDate</a></p>
<p><strong>appendText</strong> &#8211; текст, который будет отображаться после каждого поля выбора даты. Можно использовать, например для того, чтобы пометить поле как обязательное для заполнения.</p>
<p><strong>buttonImage</strong> &#8211; адрес картинки, которая будет отображаться на кнопке, с помощью которой можно вызывать календарь. Используется совместно с опцией showOn, когда та принимает значения &#8216;button&#8217; или &#8216;both&#8217;. Если был определен текст в опции buttonText, он становится значением атрибута alt картинки.</p>
<p><strong>buttonImageOnly</strong> &#8211; если для этой опции установить значение true, то картинка, адрес которой определен в опции buttonImage, будет отображаться не на кнопке, а сама по себе.</p>
<p><strong>buttonText</strong> &#8211; текст, отображающийся на кнопке, с помощью которой можно вызывать календарь. Используется совместно с опцией showOn, когда та принимает значения &#8216;button&#8217; или &#8216;both&#8217;.</p>
<p><strong>changeMonth</strong> &#8211; если в этой опции передать значение true, будет возможно выбирать месяц из выпадающего списка.</p>
<p><strong>changeYear</strong> &#8211; если в этой опции передать значение true, будет возможно выбирать год из выпадающего списка.</p>
<p><strong>closeText</strong> &#8211; эта опция используется совместно с showButtonPanel, если последняя имеет значение true. Значение опции closeText определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>constrainInput</strong> &#8211; по умолчанию опция имеет значение true и принуждает строго соблюдать формат даты, определенный в опциях виджета, в текстовом поле ввода. Чтобы иметь возможность не соблюдать этот формат, следует установить опцию в false.</p>
<p><strong>currentText</strong> &#8211; эта опция используется совместно с showButtonPanel, если последняя имеет значение true. Значение опция currentText определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>dateFormat</strong> &#8211; определяет формат даты. Значение опции dateFormat определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Полный список возможных форматов можно найти на</p>
<p>http://docs.jquery.com/UI/Datepicker/formatDate</p>
<p><strong>dayNames</strong> &#8211; массив, содержащий полные названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>dayNamesMin</strong> &#8211; массив, содержащий 2-хбуквенную аббревиатуру названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>dayNamesShort</strong> &#8211; массив, содержащий 3-хбуквенную аббревиатуру названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>defaultDate</strong> &#8211; устанавливает дату, которая будет подсвечена при первом открытии, если поле выбора даты пустое. Опция может быть определена через объект Date, либо как количество дней от текущего для (например +7 или -15), либо как строка значений, определяющих период (&#8216;y&#8217; для лет, &#8216;m&#8217; для месяцев, &#8216;w&#8217; для недель, &#8216;d&#8217; для дней, например &#8216;+1m +7d&#8217;), и наконец как null для текущего дня.</p>
<p><strong>duration</strong> &#8211; длительность эффекта анимации при открытии (закрытии) календаря. Может принимать значения в виде строки &#8211; &#8216;fast&#8217;, &#8216;normal&#8217; (по умолчанию), &#8217;slow&#8217; или в виде числа в миллисекундах. Если передать пустую строку, календарь будет открываться и закрываться без эффекта анимации.</p>
<p><strong>firstDay</strong> &#8211; опция устанавливает первый день недели: воскресенье – 0, понедельник – 1,… Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>gotoCurrent</strong> &#8211; если установить значение опции в true, то кнопка «Сегодня» (доступная при showButtonPanel: true) будет указывать на выбранную дату взамен текущей.</p>
<p><strong>hideIfNoPrevNext</strong> &#8211; если Вы ограничиваете диапазон доступных дат с помощью опций minDate и maxDate, то при достижении края диапазона, стрелки «Назад» и «Вперед» становятся неактивными. Но их можно и совсем скрывать, передав в опции hideIfNoPrevNext значение true.</p>
<p><strong>isRTL</strong> &#8211; для этой опции необходимо установить значение true, если используется язык с написанием справа налево. Определяется в файле локализации, если он используется.</p>
<p><strong>maxDate</strong> &#8211; устанавливает максимальную возможную для выбора дату через объект Date или как число дней от текущего (например +7) или как строку значений определяющих период (&#8216;y&#8217; для лет, &#8216;m&#8217; для месяцев, &#8216;w&#8217; для недель, &#8216;d&#8217; для дней, например &#8216;+1y +1m&#8217;), или null для отсутствия ограничения.</p>
<p><strong>minDate</strong> &#8211; устанавливает минимальную возможную для выбора дату через объект Date или как число дней от текущего (например -7) или как строку значений определяющих период (&#8216;y&#8217; для лет, &#8216;m&#8217; для месяцев, &#8216;w&#8217; для недель, &#8216;d&#8217; для дней, например &#8216;-1y -1m&#8217;), или null для отсутствия ограничения.</p>
<p><strong>monthNames</strong> &#8211; массив, содержащий полные названия месяцев. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>monthNamesShort</strong> &#8211; массив, содержащий 3-хбуквенную аббревиатуру названия месяцев. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.</p>
<p><strong>navigationAsDateFormat</strong> &#8211; по умолчанию опция имеет значение false. Если установить значение true, функция dateFormat будет примерена к значениям опций nextText, prevText и currentText с тем, чтобы отображать при навигации, например предыдущее и следующее названия месяцев.</p>
<p><strong>nextText</strong> &#8211; текст, который отображается в качестве ссылки на следующий месяц. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Если используется файл стилей ThemeRoller’а, это значение заменяется иконкой.</p>
<p><strong>numberOfMonths</strong> &#8211; эта опция определяет, сколько месяцев сразу нужно показать. Значение опции может быть просто числом или массивом, состоящим из двух элементов, которые определяют соответственно количество строк и столбцов. Например, значение [2, 3] отобразит календарь в две строки по три месяца.</p>
<p><strong>prevText</strong> &#8211; текст, который отображается в качестве ссылки на предыдущий месяц. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Если используется файл стилей ThemeRoller’а, это значение заменяется иконкой.</p>
<p><strong>shortYearCutoff</strong> &#8211; значение по умолчанию +10. Эта опция используется только при условии использования в dateFormat двузначной записи года и выполняет роль компенсатора для определения века. Если значение передано в виде числа, используется как есть. Если значение передано в виде строки, конвертируется в число и добавляется к текущему значению года. После того как значение определено, все данные, выступающие в качестве значения года, и меньшие и равные ему считаются годами текущего века. Значения большие – считаются годами предыдущего века.</p>
<p><strong>showAnim</strong> &#8211; определяет тип анимации при открывании календаря. По умолчанию имеет значение show (при закрывании будет использован hide). Без подключения дополнительных файлов могут быть использованы эффекты &#8217;slideDown&#8217; и &#8216;fadeIn&#8217; (при закрывании соответственно будут использоваться эффекты &#8217;slideUp&#8217; и &#8216;fadeOut&#8217;). Так же возможно использование любых эффектов jQuery UI Effects при условии их дополнительного подключения.</p>
<p><strong>showButtonPanel</strong> &#8211; установка значения true для этой опции приведет к тому, что будет показана панель с двумя кнопками – переход к сегодняшней дате и закрытие календаря.</p>
<p><strong>showCurrentAsPos</strong> &#8211; когда используется отображение сразу нескольких месяцев, число, переданное в этой опции, определяет позицию текущего месяца. По умолчанию используется значение 0, и текущий месяц отображается в верхнем левом углу.</p>
<p><strong>showMonthAfterYear</strong> &#8211; по умолчанию используется значение false и в заголовке название месяца идет перед годом. При использовании значения true название месяца будет следовать за годом.</p>
<p><strong>showOn</strong> &#8211; по умолчанию эта опция имеет значение &#8216;focus&#8217;, что заставляет календарь открываться при щелчке в поле ввода. Другие возможные значения &#8211; &#8216;button&#8217; и &#8216;both&#8217;. Рядом с полем ввода появится кнопка. В первом случае календарь будет открываться по щелчку на кнопке, а во втором случае как по щелчку на кнопке, таки при получении фокуса полем ввода.</p>
<p><strong>showOptions</strong> &#8211; если Вы используете один из эффектов jQuery UI Effects, с помощью этой опции ему можно передать дополнительные настройки. Например: showOptions: {direction: &#8216;up&#8217;}.</p>
<p><strong>showOtherMonths</strong> &#8211; по умолчанию имеет значение false. Если использовать true, на календаре будут отображаться дни предыдущего и/или следующего месяца без возможности их выбора.</p>
<p><strong>stepMonths</strong> &#8211; определяет насколько месяцев сдвигать календарь при щелчке по ссылкам Следующий и Предыдущий. По умолчанию – 1.</p>
<p><strong>yearRange</strong> &#8211; управление диапазоном лет, отображаемых в выпадающем списке (при использовании опции changeYear). По умолчанию используется значение &#8216;-10:+10&#8242; относительно текущего года. Возможно использование и абсолютного формата, например &#8216;1980:2025&#8242;.</p>
<p>Перейдем к знакомству с событиями виджета Datepicker:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $.datepicker.setDefaults($.extend(
    $.datepicker.regional[&quot;ru&quot;])
  );
  $(&quot;#datepicker&quot;).datepicker({
    beforeShow: function(input) {
      $(input).css(&quot;background-color&quot;,&quot;#ff9&quot;);
    },
    onSelect: function(dateText, inst) {
      $(this).css(&quot;background-color&quot;,&quot;&quot;);
      alert(&quot;Выбрано: &quot; + dateText +
        &quot;\n\nid: &quot; + inst.id +
        &quot;\nselectedDay: &quot; + inst.selectedDay +
        &quot;\nselectedMonth: &quot; + inst.selectedMonth +
        &quot;\nselectedYear: &quot; + inst.selectedYear);
    },
    onClose: function(dateText, inst) {
      $(this).css(&quot;background-color&quot;,&quot;&quot;);
    }
  });
});
&lt;/script&gt;</pre>
<p>В примере мы передаем виджету сразу три опции, в которых определены callback-функции. В опции <strong>beforeShow</strong> определена функция, которая будет вызвана перед отображением календаря. С помощью css-свойства background-color, эта функция установит желтый цвет фона для элемента input. В опции <strong>onSelect</strong> определена функция, которая будет вызвана в момент выбора какой-либо даты в календаре и передаст пустое значение css-свойству background-color, возвратив его в начальное состояние. И, наконец, в опции <strong>onClose</strong> определена функция, которая вызывается при закрытии календаря, если никакое значение выбрано не было. Она тоже вернет css-свойство background-color в его начальное состояние.</p>
<p>Но, обратите внимание, все callback-функции принимают некоторые аргументы. С ними стоит познакомиться немного подробнее.</p>
<p>В опции <strong>beforeShow</strong> функция принимает в качестве аргумента объект, характеризующий элемент input. В примере мы указали этот объект в качестве селектора jQuery и получили, таким образом, возможность работать с его css-свойствами с помощью методов библиотеки.</p>
<p>В опции <strong>onSelect</strong> функция принимает два аргумента. Первый аргумент <strong>dateText</strong> – строка, представляющая собой тот текст, который появится и в элементе input. Второй аргумент – объект datepicker. В том же примере показано, как можно обратиться к некоторым из свойств этого объекта.</p>
<p>Функция, определенная в опции <strong>onClose</strong> принимает те же два аргумента, что и функция из опции <strong>onSelect</strong>.</p>
<p>И еще одно важное обстоятельство для callback-функций, определенных в опциях <strong>onSelect</strong> и <strong>onClose</strong> – в контексте этих функций ссылка <strong>this</strong> указывает на объект, характеризующий элемент input.</p>
<p>Ниже приведены описания всех возможных событий для виджета Datepicker.</p>
<p><strong>beforeShow</strong> &#8211; здесь можно определить функцию, которая будет вызываться перед открытием календаря. Функция принимает в качестве аргумента объект, характеризующий текстовое поле ввода с которым работает виджет.</p>
<p><strong>beforeShowDay</strong> &#8211; в этой опции можно определить пользовательскую функцию, которая будет принимать в качестве аргумента выбранную дату. Функция должна возвратить массив, где элемент с индексом [0] – true или false показывает, возможен или нет выбор этой даты. Элемент с индексом [1] содержит имя класса (классов) для отображения даты. Элемент с индексом [2] (опционально) – текст всплывающей подсказки для даты. Функция будет вызываться для каждой даты в календаре в момент наведения указателя мыши.</p>
<p><strong>onChangeMonthYear</strong> &#8211; здесь можно определить функцию, которая будет вызываться при смене месяца или года в календаре. Функция принимает три аргумента. Первые два аргумента – это новые значения года и месяца, третий аргумент – объект datepicker.</p>
<p><strong>onClose</strong> &#8211; в этой опции определяется функция, которая будет вызвана, когда календарь был закрыт без выбора какой-либо даты.</p>
<p><strong>onSelect</strong> &#8211; в этой опции определяется функция, которая будет вызвана, когда в календаре выбрана какая-либо дата.</p>
<p>Теперь можно поговорить о методах виджета Datepicker. Давайте добавим в наш HTML-код обыкновенную ссылку:</p>
<pre class="brush: xml;">&lt;a href=&quot;#&quot;&gt;Открыть в диалоге&lt;/a&gt;</pre>
<p>и используем вот такой javascript-код:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $.datepicker.setDefaults(
      $.extend($.datepicker.regional[&quot;ru&quot;])
  );
  $(&quot;#datepicker&quot;).datepicker({
    changeYear: true
  });
  $(&quot;a&quot;).click(function(){
    $(&quot;#datepicker&quot;).datepicker(
        &quot;dialog&quot;,
        &quot;23.04.2009&quot;,
        function(){
          alert(&quot;Событие onSelect&quot;);
        },
        { showButtonPanel: true },
        [300, 300]
    );
  });
});
&lt;/script&gt;</pre>
<p>В приведенном примере мы демонстрирует работу метода <strong>dialog</strong>. Мы вызываем этот метод при щелчке на ссылке <strong>Открыть в диалоге</strong>. Первый аргумент – это название метода, второй аргумент <strong>textDate</strong> – дата на которой по умолчанию будет открываться календарь. Остальные три аргумента необязательные, но мы познакомимся и с ними. В аргументе <strong>onSelect</strong> можно передать callback-функцию, которая будет вызвана при выборе конкретной даты в календаре. В аргументе <strong>settings</strong> можно передать объект с новыми настройками виджета, которые будут применены к календарю, который будет открыт в диалоговом окне. И, наконец, последний аргумент <strong>pos</strong> – здесь можно задать координаты, в которых будет появляться календарь. Координаты можно задавать числами, но если передать в функцию, вызываемую по щелчку на ссылке <strong>объект event</strong>, то можно будет определить координаты, используя свойства объекта event. Например, использовать event.clientX и event.clientY.</p>
<p>Далее приведены описания всех методов виджета Datepicker.</p>
<p><strong>destroy</strong> &#8211; .datepicker(&#8216;destroy&#8217;) полностью удаляет всю функциональность виджета Datepicker. Возвращает элементы в состояние, предшествующее инициализации.</p>
<p><strong>disable</strong> &#8211; .datepicker(&#8216;disable&#8217;) временно запрещает использование всей функциональности виджета. Вновь разрешить ее использование можно с помощью метода enable.</p>
<p><strong>enable</strong> &#8211; .datepicker(&#8216;enable&#8217;) разрешает использование всей функциональности виджета, если ранее она была запрещена с использованием метода disable.</p>
<p><strong>option</strong> &#8211; .datepicker(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции виджета после инициализации.</p>
<p><strong>dialog</strong> &#8211; .datepicker(&#8216;dialog&#8217;, dateText, [onSelect], [settings], [pos]) открывает виджет Datepicker в режиме диалогового окна. В аргументе dateText передается дата, на которой должен быть открыт календарь. Остальные аргументы необязательные. В аргументе onSelect можно передать функцию, которая будет вызвана в момент выбора даты в календаре, в аргументе settings можно передать объект с новыми настройками виджета, в аргументе pos – координаты, в которых будет открыто диалоговое окно. Здесь можно использовать события мыши, чтобы определить координаты.</p>
<p><strong>isDisabled</strong> &#8211; .datepicker(&#8216;isDisabled&#8217;) метод возвращает значение true, если к виджету был применен метод disable и false в противном случае.</p>
<p><strong>hide</strong> &#8211; .datepicker(&#8216;hide&#8217;, [speed]) скрывает ранее открытый календарь.</p>
<p><strong>show</strong> &#8211; .datepicker(&#8217;show&#8217;) открывает календарь.</p>
<p><strong>getDate</strong> &#8211; .datepicker(&#8216;getDate&#8217;) метод возвращает дату, выбранную в календаре.</p>
<p><strong>setDate</strong> &#8211; .datepicker(&#8217;setDate&#8217;, date) метод позволяет установить дату в календаре. Значением аргумента date может быть число, определяющее количество дней от текущей даты (например: +7 или -14) или строка, определяющая период (&#8216;y&#8217; для лет, &#8216;m&#8217; для месяцев, &#8216;w&#8217; для недель, &#8216;d&#8217; для дней, например &#8216;+1m +7d&#8217;). Значение null установит текущую дату.</p>
<p>Вот и все. Разве что сказать, что для управления календарем можно использовать горячие клавиши:<br />
- <em>page up/down</em> – предыдущий/следующий месяц;<br />
- <em>ctrl+page up/down</em> &#8211; предыдущий/следующий год;<br />
-<em>ctrl+home</em> – выбор текущего месяца или открытие календаря после того как он был закрыт;<br />
- <em>ctrl+left/right</em> &#8211; предыдущий/следующий день;<br />
- <em>ctrl+up/down</em> &#8211; предыдущая/следующая неделя;<br />
- <em>enter</em> – выбор отмеченной даты;<br />
- <em>ctrl+end</em> – закрытие и удаление даты из поля ввода;<br />
- <em>escape</em> – закрытие календаря без выбора даты;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/103.html/feed</wfw:commentRss>
		<slash:comments>91</slash:comments>
		</item>
		<item>
		<title>jQuery UI &#8211; виджет Tabs</title>
		<link>http://www.linkexchanger.su/2009/99.html</link>
		<comments>http://www.linkexchanger.su/2009/99.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 05:00:40 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tabs]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/99.html</guid>
		<description><![CDATA[jQuery UI &#8211; надстройка над JavaScript-библиотекой jQuery. Она поможет создавать по настоящему интерактивные веб-приложения. Сегодня мы познакомимся с виджетом Tabs.

Виджет Tabs помогает разделить информационное наполнение между несколькими вкладками. Это может быть полезно при дефиците свободного места на веб-странице. Информационное наполнение вкладок может быть загружено с помощью ajax-запроса.
Для начала посетим страницу настраиваемой закачки на сайте jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery UI &#8211; надстройка над JavaScript-библиотекой jQuery. Она поможет создавать по настоящему интерактивные веб-приложения. Сегодня мы познакомимся с виджетом Tabs.<br />
<img src="http://www.linkexchanger.su/wp-content/uploads/2009/06/tabs1.jpg" alt="Виджет Tabs" /><br />
Виджет Tabs помогает разделить информационное наполнение между несколькими вкладками. Это может быть полезно при дефиците свободного места на веб-странице. Информационное наполнение вкладок может быть загружено с помощью ajax-запроса.<span id="more-99"></span></p>
<p>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong> , чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Tabs</strong> и видим, что вместе с ним отметился <strong>чекбокс UI Core</strong>. Работа виджета Tabs зависит от него, поэтому он необходим.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив. Можно испытать пример как есть, но интереснее создать свою HTML-страничку, где сначала в разделе HEAD подключить несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/le-frog/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.cookie.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Сначала мы подключили файл стилевого оформления виджета, затем файл библиотеки jQuery. В третьем подключенном файле объединена функциональность ядра UI и виджета Tabs. Четвертый файл понадобится в том случае, если Вам необходимо использовать cookies. Найти его можно в папке архива development-bundle/external/cookie/.<br />
Дальше знакомимся с требованиями виджета Tabs к HTML-разметке.</p>
<pre class="brush: xml;">
&lt;div id=&quot;tabs&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-1&quot;&gt;Nunc tincidunt&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-2&quot;&gt;Proin dolor&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-3&quot;&gt;Aenean lacinia&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div id=&quot;tabs-1&quot;&gt;
    &lt;p&gt;Tab 1 content&lt;/p&gt;
  &lt;/div&gt;
  &lt;div id=&quot;tabs-2&quot;&gt;
    &lt;p&gt;Tab 2 content&lt;/p&gt;
  &lt;/div&gt;
  &lt;div id=&quot;tabs-3&quot;&gt;
    &lt;p&gt;Tab 3 content&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Ярлыками вкладок являются элементы <strong>li</strong>, в атрибутах <strong>href</strong> которых содержится идентификаторы соответствующих им элементов <strong>div</strong>, которые представляют собой область информационного наполнения вкладки. Внутри элементов <strong>div</strong> содержимое может быть практически любым. Ну и все это заключено в элемент <strong>div</strong> с идентификатором <strong>#tabs</strong>.</p>
<p>Теперь привяжем функциональность виджета к HTML-разметке.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#tabs&quot;).tabs();
});
&lt;/script&gt;
</pre>
<p>Все. С настройками по умолчанию виджет уже работает. Теперь будем передавать ему свои настройки:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#tabs&quot;).tabs({
    event: &quot;mouseover&quot;,
    selected: 2
  });
});
&lt;/script&gt;</pre>
<p>В этом примере мы заставили виджет Tabs переключать вкладки по событию mouseover (взамен установленного по умолчанию click) и открывать при инициализации третью вкладку (отсчет ведется от 0).</p>
<p>Сразу еще один пример, который демонстрирует приемы использования cookies для запоминания последней открытой вкладки для того, чтобы впоследствии открыть ее при инициализации. Но, до этого давайте добавим в HTML-разметку кнопку, для того, чтобы кликнув по ней, убедиться, что cookies действительно ставятся.</p>
<pre class="brush: xml;">&lt;button id=&quot;getCookie&quot;&gt;Get Cookie&lt;/button&gt;</pre>
<p>и собственно пример установки cookies</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#tabs&quot;).tabs({
    cookie: { expires: 7, name: &quot;startTab&quot; }
  });
  $(&quot;#getCookie&quot;).click(function(){
    var cook = $(&quot;#tabs&quot;).tabs(&quot;option&quot;, &quot;cookie&quot;);
    alert(&quot;name: &quot; + cook.name +
            &quot;\nexpires: &quot; + cook.expires);
  });
});
&lt;/script&gt;</pre>
<p>Мы установили cookie с именем startTab сроком на 7 дней. Щелчок по кнопке с идентификатором getCookie приведет к тому, что в окне предупреждения мы увидим имя установленной cookie и срок, на который она была установлена. Не забывайте, что для использования этой возможности необходимо подключать дополнительный файл плагина jQuery Cookie.</p>
<p>Мы научились передавать виджету различные опции, а их описания приведены ниже:</p>
<p><strong>ajaxOptions</strong> &#8211; опции ajax-запроса, которые используются для загрузки удаленного содержимого в область информационного наполнения. По умолчанию используется значение null.</p>
<p><strong>cache</strong> &#8211; опция определяет, кэшировать или нет информационное наполнение вкладки, загружаемое с помощью ajax-запросов, т.е. загрузить содержимое только однажды или загружать каждый раз, когда совершен щелчок на ярлыке вкладки. По умолчанию используется значение false, т.е. кэширование не производится. Обратите внимание – чтобы воспрепятствовать фактическому кэшированию данных браузером Вы должны дополнительно обеспечить значение false в опциях самого ajax-запроса.</p>
<p><strong>collapsible</strong> &#8211; по умолчанию используется значение false. Если передать в этой опции значение true, то каждый следующий щелчок на ярлыке вкладки будет скрывать и открывать область информационного наполнения.</p>
<p><strong>cookie</strong> &#8211; запоминает последнюю выбранную вкладку в cookie. В дальнейшем используется для определения вкладки, открываемой по умолчанию (если не используется опция selected). Требует подключения плагина cookie. Возможно присвоение имени cookie через опцию name.</p>
<p><strong>disabled</strong> &#8211; массив, содержащий индексы вкладок (отсчет ведется от 0), которые должны быть недоступными при инициализации виджета. Например, disabled: [1, 2] сделает недоступными вторую и третью вкладки.</p>
<p><strong>event</strong> &#8211; тип события, которое используется для переключения вкладок. По умолчанию используется значение &#8216;click&#8217;. Второе возможное значение &#8216;mouseover&#8217;.</p>
<p><strong>fx</strong> &#8211; устанавливает анимационные эффекты при открытии/закрытии вкладок. Например: fx: { opacity: &laquo;toggle&raquo;, duration: &laquo;slow&raquo; }</p>
<p><strong>panelTemplate</strong> &#8211; HTML-шаблон из которого создается новая область информационного наполнения вкладки в случае создания ее с использованием метода add или при создании вкладки «на лету» с использованием ajax-запроса. По умолчанию имеет значение &#8216;&lt;div&gt;&lt;/div&gt;&#8217;.</p>
<p><strong>selected</strong> &#8211; индекс вкладки, (отсчет ведется от 0) которая должна быть открыта при инициализации виджета. По умолчанию используется значение 0, т.е. открывается первая вкладка. Чтобы сделать невыбранными все вкладки, надо использовать значение -1.</p>
<p><strong>spinner</strong> &#8211; HTML-код, указанный в этой строке, отображается на ярлыке вкладки во время загрузки удаленного содержимого в область информационного наполнения. Если передать пустую строку, эта возможность будет деактивирована. По умолчанию используется &lt;em&gt;Loading&lt;/em&gt;.</p>
<p><strong>tabTemplate</strong> &#8211; HTML-шаблон из которого создаются новые ярлыки вкладок в случае создания их с использованием метода add. #{href} and #{label} заменяются url’ом и названием вкладки, переданными в аргументах метода add. По умолчанию имеет значение &#8216;&lt;li&gt;&lt;a href=&raquo;#{href}&raquo;&gt;&lt;span&gt;#{label}&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&#8217;.</p>
<p>Точно так же как и другие виджеты, виджет Tabs умеет реагировать на разнообразные события. Посмотрим пример использования одного из возможных событий.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#tabs&quot;).tabs({
    selected: 2,
    select: function(event, ui) {
      alert(&quot;Событие: &quot; + event.type +
            &quot;\nui.tab: &quot; + ui.tab +
            &quot;\nui.panel: &quot; + ui.panel.innerHTML +
            &quot;\nui.index: &quot; + ui.index);
    }
  });
});
&lt;/script&gt;</pre>
<p>Мы определили в опции <strong>select</strong> callback-функцию, которая будет вызываться в момент наступления события <strong>tabsselect</strong>, т.е. в тот момент, когда был совершен щелчок по ярлыку вкладки. Callback-функция принимает два аргумента. Первый аргумент – это объект <strong>event</strong>, второй аргумент – специальный объект <strong>ui</strong>. Организовав доступ к свойствам этих объектов, можно получить довольно полезную информацию (мы выводим ее в окне предупреждения).</p>
<p><strong>ui.tab</strong> – ссылка на активированную в настоящий момент вкладку;<br />
<strong>ui.panel</strong> – ссылка на элемент, в котором заключено информационное наполнение активированной вкладки ;<br />
<strong>ui.index</strong> – индекс активированной вкладки (отсчет ведется от 0);</p>
<p>Ниже приведены описания событий виджета Tabs и названия опций, в которых можно определить callback-функции, вызываемые при наступлении события.</p>
<p><strong>select</strong> &#8211; событие <em>tabsselect</em> происходит в момент щелчка по ярлыку вкладки (при наведении указателя мыши на вкладку, если используется опция event: &#8216;mouseover&#8217;). При щелчке на ярлыке активной вкладки ничего не происходит.</p>
<p><strong>load</strong> &#8211; событие <em>tabsload</em> происходит, когда в область информационного наполнения вкладки было загружено содержимое из внешнего файла.</p>
<p><strong>show</strong> &#8211; событие <em>tabsshow</em> происходит в момент отображения содержимого вкладки.</p>
<p><strong>add</strong> &#8211; событие <em>tabsadd</em> происходит каждый раз, когда добавлена новая вкладка.</p>
<p><strong>remove</strong> &#8211; событие <em>tabsremove</em> происходит каждый раз, когда удалена какая-либо вкладка.</p>
<p><strong>enable</strong> &#8211; событие <em>tabsenable</em> происходит в момент, когда ранее недоступная вкладка становится доступной.</p>
<p><strong>disable</strong> &#8211; событие <em>tabsdisable</em> происходит в момент, когда вкладка становится недоступной.</p>
<p>Осталось разобраться с методами виджета Tabs. Для этого добавим еще пару кнопок в HTML-разметку:</p>
<pre class="brush: xml;">&lt;button id=&quot;startRotate&quot;&gt;Start Rotate&lt;/button&gt;
&lt;button id=&quot;stopRotate&quot;&gt;Stop Rotate&lt;/button&gt;</pre>
<p>и пример javascript-кода:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#tabs&quot;).tabs({
    selected: 2
  });
  $(&quot;#startRotate&quot;).click(function(){
    $(&quot;#tabs&quot;).tabs(&quot;rotate&quot;, 3000, true);
  });
  $(&quot;#stopRotate&quot;).click(function(){
    $(&quot;#tabs&quot;).tabs(&quot;rotate&quot;, null);
  });
});
&lt;/script&gt;</pre>
<p>При щелчке на кнопке с идентификатором <strong>Start Rotate</strong> будет применен метод <strong>rotate</strong>, который заставит виджет самостоятельно переключать вкладки каждые три секунды. При щелчке на кнопке с идентификатором <strong>Stop Rotate</strong> автоматическое переключение вкладок будет остановлено.</p>
<p>Далее приведены описания всех доступных методов виджета Tabs.</p>
<p><strong>destroy</strong> &#8211; .tabs(&#8216;destroy&#8217;) полностью удаляет всю функциональность виджета Tabs. Возвращает элементы в состояние, предшествующее инициализации.</p>
<p><strong>disable</strong> &#8211; .tabs(&#8216;disable&#8217;) временно запрещает использование всей функциональности виджета. Вновь разрешить ее использование можно с помощью метода enable.</p>
<p><strong>enable</strong> &#8211; .tabs(&#8216;enable&#8217;) разрешает использование всей функциональности виджета, если ранее она была запрещена с использованием метода disable.</p>
<p><strong>option</strong> &#8211; .tabs(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции виджета после инициализации.</p>
<p><strong>add</strong> &#8211; .tabs(&#8216;add&#8217;, url, label, [index]) метод добавляет новую вкладку. Второй аргумент содержит либо идентификатор создаваемой вкладки, (см. требования к разметке) либо является полным  url (относительным или абсолютным, но без поддержки кросс-доменной загрузки) при создании вкладки с использованием ajax. Третий аргумент – название вкладки, отображаемое на ее ярлыке. Четвертый &#8211; индекс создаваемой вкладки (позиции отсчитываются от 0).</p>
<p><strong>remove</strong> &#8211; .tabs(&#8216;remove&#8217;, index ) удаляет вкладку. Второй аргумент &#8211; индекс удаляемой вкладки (позиции отсчитываются от 0).</p>
<p><strong>enable</strong> &#8211; .tabs(&#8216;enable&#8217;, index) делает доступной ранее недоступную вкладку. Чтобы сделать доступными одновременно несколько вкладок  сделайте так: $(&#8216;#tabs&#8217;).data(&#8216;disabled.tabs&#8217;, [ ]);</p>
<p><strong>disable</strong> &#8211; .tabs(&#8216;disable&#8217;, index) делает вкладку недоступной. Активная вкладка не может быть сделана недоступной. Чтобы сделать недоступными одновременно несколько вкладок  сделайте так: $(&#8216;#tabs&#8217;).data(&#8216;disabled.tabs&#8217;, [1, 2, 3]);</p>
<p><strong>select</strong> &#8211; .tabs(&#8217;select&#8217;, index) метод позволяет выбрать вкладку так, как будто был сделан щелчок по ее ярлыку. Второй аргумент &#8211; индекс нужной вкладки (позиции отсчитываются от 0). Он же может быть идентификатором вкладки (см. требования к разметке).</p>
<p><strong>load</strong> &#8211; .tabs(&#8216;load&#8217;, index) программно перезагружает содержимое вкладки, используя ajax-запрос. Этот метод всегда загружает содержимое, даже если опция cache имеет значение true. Второй аргумент &#8211; индекс нужной вкладки (позиции отсчитываются от 0).</p>
<p><strong>url</strong> &#8211; .tabs(&#8216;url&#8217;, index, url) изменяет url, откуда с помощью ajax-запроса будет загружаться содержимое. Второй аргумент &#8211; индекс нужной вкладки (позиции отсчитываются от 0). Указанный в третьем аргументе url будет использоваться и для дальнейших загрузок.</p>
<p><strong>length</strong> &#8211; .tabs(&#8216;length&#8217;) метод просто возвращает количество вкладок.</p>
<p><strong>abort</strong> &#8211; .tabs(&#8216;abort&#8217;) метод завершает все выполняющиеся ajax-запросы и анимацию.</p>
<p><strong>rotate</strong> &#8211; .tabs(&#8216;rotate&#8217;, ms, [continuing]) метод устанавливает автоматический перебор всех вкладок. Второй аргумент – количество миллисекунд, в течение которых очередная вкладка будет активной. Чтобы остановить перебор вкладок во втором аргументе необходимо передать 0 или null. Третий аргумент определяет логику при выборе вкладки пользователем. Значение true – перебор вкладок будет продолжен. По умолчанию используется false.</p>
<p>Все? Пожалуй, нет. Как можно обойтись без примера, где информационное наполнение загружается с использованием ajax-запросов, верно?</p>
<p>Сделать это несложно, но придется немного поменять HTML-разметку:</p>
<pre class="brush: xml;">
&lt;div id=&quot;tabs&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;ajax_1.html&quot;&gt;&lt;span&gt;Content 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;ajax_2.html&quot;&gt;&lt;span&gt;Content 2&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;ajax_3.html&quot;&gt;&lt;span&gt;Content 3&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#tabs-4&quot;&gt;Content 4&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div id=&quot;tabs-4&quot;&gt;
    &lt;p&gt;4. Информационное наполнение для вкладки №4.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Изучите пример этой разметки и обратите внимание, что вкладки с информацией, загружаемой с помощью ajax-запросов, вполне успешно могут соседствовать с вкладками, созданными обычным способом.</p>
<p>Конечно, надо создать еще и файлы, из которых будет загружаться информация. В нашем примере &#8211; это ajax_1.html, ajax_2.html и ajax_3.html. А больше ничего и не потребуется. Что касается javascript-кода, можно использовать даже настройки по умолчанию:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#tabs&quot;).tabs();
});
&lt;/script&gt;</pre>
<p>Все. Про стилевое оформление не пишу &#8211; планирую отдельную статью про это сразу для всех виджетов.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/99.html/feed</wfw:commentRss>
		<slash:comments>106</slash:comments>
		</item>
	</channel>
</rss>

