четверг, 2 июля 2009 г.

JQuery Menu: делаем быстрое меню

Изучать jquery я начал пару месяцев назад по долгу службы, и очень скоро понял насколько это удобно. Причем не только если разрабатываешь какое-нибудь ajax-приложение, но и в более мелких вещах — таких как простенькие анимации, выпадающие менюшки и тд.

В этой статье я опишу как можно с помощью jquery обычное многоуровневое меню сделать раскрывающимся без правки исходного html-кода.

Некоторые оставляют корневые ссылки ссылками, но мы так делать не будем. У нас корневые ссылки ("О компании", "Продукция", "Мясные продукты", "Алкоголь") не будут вести ни на какую страницу, при клике по ним будет раскрываться подменю.

Итак, первым делом инициализируем библиотеку jquery.js. Желательно подключать ее в секции документа:

Теперь мы может писать javascript-скрипты. Делать это будем в отдельном js-файле, который прилинкуем аналогично jquery.js. Сразу приведу базовый код:

$(document).ready(function() {

$('ul#my-menu ul').each(function(index) {
$(this).prev().addClass('collapsible').click(function() {
if ($(this).next().css('display') == 'none') {
$(this).next().slideDown(200, function () {
$(this).prev().removeClass('collapsed').addClass('expanded');
});
}else {
$(this).next().slideUp(200, function () {
$(this).prev().removeClass('expanded').addClass('collapsed');
$(this).find('ul').each(function() {
$(this).hide().prev().removeClass('expanded').addClass('collapsed');
});
});
}
return false;
});
});
});

Здесь мы делаем следующие вещи:

  1. когда дерево DOM документа готово, пробегаемся в цикле по всем подменю (ul#my-menu ul);
  2. в каждой итерации назначаем класс 'collapsible' ссылке, которая отвечает за данное подменю;
  3. этой же ссылке назначаем обработчик события 'click', который в зависимости от состояния подменю будет раскрывать либо скрывать его.
  4. onlick возвращает 'false', чтобы не происходил переход по ссылке.

Попробуем потыкать на результат:

Мне кажется, когда ты скрываешь, например, подменю "Продукция", и потом раскрываешь его — дочерние подменю должны быть закрытыми независимо от того в каком положении они были раньше. Поэтому добавим в callback-функцию метода slideUp еще такую строчку:

$(this).find('ul').each(function() {

$(this).hide().prev().removeClass('expanded').addClass('collapsed');
});

В принципе, меню готово. Однако можно навесить еще пару небольших примочек. Например, реализовать запоминание раскрытости меню при переходе на другие страницы. Сделаем это через cookie. Смысл таков — когда меню раскрывается, в cookie заносится запись вида 'submenuMark-xx=opened', где xx - порядковый номер (индекс) данного подменю в списке всех подменю. Соответственно, когда закрывается - запись стирается из cookie.

Для работы с cookie нам будет удобен плагин jquery.cookie.js. Скачаем его и подключим рядом с jquery. Теперь напишем пару вспомогательных фукнций для работы с cookie:

function cookieSet(index) {

$.cookie('submenuMark-' + index, 'opened', {expires: null, path: '/'});
}
function cookieDel(index) {
$.cookie('submenuMark-' + index, null, {expires: null, path: '/'});
}

При загрузке документа нам нужно посмотреть какие подменю отмечены в куках и открыть их. Поэтому вставим следующий кусок кода в цикл по всем подменюшкам:

$('ul#my-menu ul').each(function(i) {

.....
if ($.cookie('submenuMark-' + i)) {
$(this).show();
$(this).prev().removeClass('collapsed').addClass('expanded');
}else {
$(this).hide();
$(this).prev().removeClass('expanded').addClass('collapsed');
}
.....
});

Как вы могли заметить, у нас теперь есть CSS-классы 'expanded', 'collapsed' и 'collapsible' — таким образом можно немного приукрасить наше меню с помощью CSS.

И самый последний штрих — везде, где в нашем коде открывается либо закрывается подменю, поставить вызов соответствующей куки-функции. Этого я описывать уже не буду — можно посмотреть в готовом скрипте. Итак, посмотрим на готовое меню:

Сохранение положения меню в cookie можно проверить если потыкать на ссылки и перезагрузить страницу — подменю сохранят свое состояние.

источник: http://alt-f4.ru/expanding-menu-by-jquery

JQuery Autocomplete: автодополнение при автозаполнении

Сейчас очень часто для быстрого, удобного и безошибочного заполнения веб-форм разработчиками используется такая вещь, как автодополнение. Чаще всего это используется в формах поиска, например, для выдачи пользователю наиболее часто запрашиваемых другими пользователями ключевых слов.

Например, вот так это выглядит в гугле:

Пример автокомлита в гугле

Согласитесь - удобно!

Принцип работы автокомплита достаточно прост: посетитель вводит данные в текстовое поле, браузер при каждом нажатии клавиши передает через AJAX на сервер уже набранную строку, сервер осуществляет поиск подходящих вариантов, после чего эти варианты передаются обратно пользователю и показываются. Эту систему можно как упрощать, так и усложнять, но суть от этого не изменится.

Разумеется прежде чем начать реализовывать автокомплит самостоятельно, нужно проверить а нет ли готовых средств.

Одна из первых попавшихся мне на глаза ссылок была вот эта jQuery Autocomplete

Дальше я даже не пошел, потому что наверняка, если бы я решил реализовывать автокомплит самостоятельно, мне бы все-равно пришлось использовать jQuery как для передачи данных, так и для визуализации.

Что же нужно сделать, чтобы jQuery Autocomplete заработал:

  1. Скачать jquery.js и jquery.autocomplete.js, jquery.autocomplete.css. Первый, лучше взять с официального сайта jQuery, а два других есть здесь.
  2. Добавить эти файлы в хэдер страницы.
  3. Выбрать элемент (input) для которого будет использоваться автодополнение и присвоить ему id (например ‘’search”).
  4. Добавить на страницу следующй код:
    1. jQuery(function($){
    2. $("#search").autocomplete("autocomplete.php");
    3. });

Файл autocomplete.php может возращать как текст, так и html-код. При этом для нормального функционирование в Internet Explorer нужно обязательно прописать хэдер:

  1. header("Content-type: text/plain; charset=utf-8");

Разумеется этот пример демонстрирует только самый примитивный способ использования автокомплита от jQuery. Так например мне при первом же использовании понадобилось поменять стили в файле css файле, который кстати меня приятно удивил своей простотой, а также разобраться с тем, как передовать дополнительные GET-параметры серверному скрипту. Вот как это выглядит:

  1. $("#search_region").autocomplete( "index.php",
  2. {
  3. extraParams: {module : "hotelpnforms", type : "ajax", func : "region_autocomplete"},
  4. autoFill:true
  5. }
  6. );

Параметр autoFill включает опцию автоматического заполнения поля ввода первым вариантом из возможных.

Более подробная документация по jQuery Autocomplete находится здесь.


Источник: http://bagryan.ru/archives/11

Что такое JQuery и о чем этот блог

По данным из достоверных источников

jQuery - это JavaScript-библиотека, которая появилась в январе 2006 года. На сайте разработчиков jQuery как лозунг: "jQuery is designed to change the way that you write JavaScript". Если переводить это буквально, то получится примерно следующее: "jQuery разработан, чтобы изменить путь, которым Вы пишете на JavaScript". Посидев на этом сайте несколько дней я решил, что библиотека стоит более пристального внимания. А немного поработав с ней, решил, что лозунг на сайте разработчиков - правда.

Если сформулировать иначе, то JQuery это:
Query - это быстрая, маленькая библиотека JavaScript, которая позволяет Вам менять HTML, перехватывать события, создавать анимации и добавлять интерактивность Ajax на Ваши веб странички. jQuery создана, чтобы изменить привычный путь написания JavaScript.

С помощью jQuery можно менять код страничек на лету, добавляя или удаляя целые блоки кода. А при подключении плагинов появляются дополнительные возможности.

С помощью “надстройки” над jQuery “jQuery UI” можно создавать красивые и удобные интерфейсы без особых проблем.

В общем все авторы сходятся на мысли о том, что JQuery это javascript framework с богатым функционалом, изящными решениями в коде и массой плагинов и примеров для облегчения жизни разработчика.

Данный блог не претендует на уникальность, но так как я постоянно работаю с этой библиотекой, то хочу собрать в одном месте статьи из разных источников. Эти статьи я буду публиковать на этом сайте со ссылками на исходные сообщения.

Знаете хорошие статьи по теме? пишите!!!