css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
8 Фев
Стандартные всплывающие подсказки выглядят надо сказать очень и очень бледно. С помощью библиотеки jQuery и небольшого плагина к ней мы легко сможем использовать всплывающие подсказки (tooltip) с пользовательским оформлением.
Для начала небольшой пример, который продемонстрирует, как такие подсказки могут выглядеть. Для примера выбраны обычная ссылка – элемент а и элемент input.
Пожалуйста, примите во внимание, что пример мне приходится демонстрировать во фрейме.
Вы можете скачать исходный код примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.
Файлы необходимые для реализации подключаем в раздел HEAD, их всего три – это сама библиотека jQuery, файл jquery.dimensions.js и файл для работы с подсказками jquery.tooltip.js
<script type="text/javascript" src="js/jquery-1.2.1.js"></script> <script type="text/javascript" src="js/jquery.dimensions.js"></script> <script type="text/javascript" src="js/jquery.tooltip.js"></script>
Дальше немного посмотрим на таблицу стилей, вернее на ту ее часть, где мы можем оформить нашу всплывающую подсказку.
#tooltip {
position: absolute;
z-index: 3000;
width:250px;
border: 1px solid #269;
background-color: #48b;
padding: 0;
opacity: 0.85;
color:#fff;
}
#tooltip h3 {
background-color: #269;
padding-left:5px;
font-weight:bold;
font-size:1.4em;
}
#tooltip div {
padding-left:5px;
padding-right:5px;
}
#tooltip – это и есть подсказка. Мы задаем абсолютное позиционирование, изымая таким образом подсказку из общего потока, а свойству z-index задаем заведомо большое значение, чтобы расположить подсказку «выше» элементов страницы. Дальше ничего сложного нет вообще нет. #tooltip h3 – это заголовок подсказки, в элементе #tooltip div – текст подсказки. Вообще здесь важно только сохранить название идентификатора #tooltip, все остальное – на Ваш вкус.
Дальше приведу пример кода вызова наших всплывающих подсказок.
<script type="text/javascript">
$(document).ready(function(){
$("a, input").tooltip({
track: true,
delay: 100,
showBody: "::",
opacity: 0.85
});
});
</script>
Указываем элементы a и input в качестве элементов, для которых будут вызываться всплывающие подсказки. Но это еще не все. Необходимо, чтобы эти элементы имели атрибут title. Именно его значение используется для формирования подсказки.
Обратите внимание на опцию showBody. В ней можно указать разделитель. Часть до разделителя будет показана в заголовке подсказки, оставшаяся часть в теле подсказки.
Опция track: если установлена в true – подсказка будет «привязана» к указателю мыши.
delay – отсрочка появления подсказки в миллисекундах, по умолчанию установлено значение 250.
opacity: 0.85 – прозрачность (ну конечно не для IE).
Я как всегда привел лишь несколько из возможных опций, список их несколько шире. Найти полный перечень можно на сайте разработчиков.
Отзывов (42) на «Пользовательские интерфейсы jQuery: tooltip – всплывающая подсказка.»
а чтож в архива с исходным кодом нет файлов jquery.dimensions.js и jquery.tooltip.js? ссылок тоже на них не наблюдаю. а выдирать вручную или искать кучу мелочных файлов – неблагодарное занятие.
И тот и другой файл есть в разделе download, просто надо посмотреть повнимательнее.
Звучит странно, но когда я ставил opacity в IE 6 работало. Отсюда вывод: «РАБОТАЛО OPACITY С НОЯБРЯ ПРОШЛОГО ГОДА ПО 26-е АПРЕЛЯ НЫНЕШНЕГО!»
А вот твой пример действительно не работает, поэтому привожу свой пример кода:
Javascript:
$(document).ready(function(){
$(‘#box’).hide();
$(‘.clickme’).click(function(){
$(‘#box’).css(‘opacity’, ‘0.5′).show()
return false;
});
$(‘#cluetip-close’).click(function(){
$(‘#box’).hide()
return false;
});
});
to bitfroster
Во-первых – спасибо за предоставленный код.
Во-вторых – пример не мой.
В-третьих – пример работает. Если имелось ввиду, что в IE не работает opacity – то см. в тексте – там в общем так и написано….
А как сделать чтобы в этой всплывающей подсказке не показывало URL адреса куда идет ссылка ? а то очень не красиво выглядит когда в этой подсказке большую чать занимает ссылка
To Sparco:
см. выше – все есть в статье и в примере…
Извините пожалуйста Геннадий но я что то не вижу в статье как убрать отображение ссылки в всплывающей подсказке которая применяется к тегу a с указаным атрибутом href пожалуйста напишите как это сделать или скажите где именно в статье это написано, буду очень вам признателен.
Sorry, до меня только сейчас доперло про что именно Вы спрашивали. Добавьте еще опцию showURL: false
А вообще опций довольно много. Подробнее можно посмотреть тут: http://docs.jquery.com/Plugins/Tooltip/tooltip#options на вкладке Options.
Спасибо большое … все теперь ТИП ТОП
Добрый день, у меня такой вопрос:
прописываю вот такой код:
$(document).ready(function(){
$(«select»).tooltip({
track: true,
delay: 100,
showBody: «::»,
opacity: 0.85
});
});
все работает просто замечательно до тех пор пока не добавиш disabled в select
неподскажете как этого избежать что бы с отключеным элементом подсказка так же появлялась?
Точно не скажу, вероятно связано с реализацией самого расширения. Попробуйте отбирать в набор элементов не просто select, а уточнить набор, например select[disabled='disabled'] – вот интересно, что тогда получится?
Спасибо за совет, но всеравно не хочет работать
У меня такая проблема.. создаю страницу, на ней куча ссылок с титлами.. все пашет замечательно, но потом при нажатии на кнопку тело странички(определенная часть) заменяется AJAX и эти новоприбывшие ссылки уже не хотят стилизоваться скриптом.. просто выводит банальный титл.. почему? скрипт точно есть, менятся толкьо один див в странице…
Обработка событий для элементов DOM, загружаемых через ajax
Плагин Live Query
Эти две статьи помогут Вам понять почему такая проблема возникает и как ее преодолеть.
Спасибо, пошел читать!
а у меня такая проблема. в IE (6,7,8) не понимает area. Так как если прописать другие элементы (a, input) все работает:
$(document).ready(function(){
$(‘area’).tooltip({
track: true,
delay: 120,
showURL: false,
opacity: 0.85
});
});
а в других браузерах все тип-топ. отображается как надо. В чем может быть проблема?
Не экспериментировал с area, но может быть Вам стоит попробовать в селекторе указывать не название элемента, а идентификатор, или (если это невозможно) имя класса…
К сожалению, подсказки не работают в Опере. Есть ли возможность это исправить?
Скачанный пример подсказки не работает в Опере, Хроме и ИЕ
Неужели? Ай-яй-яй! А у Вас не хватило соображения открыть вот эту самую страницу во всех вышеперечисленных браузерах и посмотреть работает или нет? Представьте – работает…
Поэтому предлагаю отредактировать Ваш комментарий так:
Скачанный пример подсказки у меня не работает в Опере, Хроме и ИЕ
Скачал пример, но почему то не хочет работать.
При добавлении библиотек, пишет, что надо заключить его внутри тега . Так и сделал, но ничего не меняется.
Поставил Jquery 1.2.6. но в примере 1.2.1 . Я думаю, это не помеха для корректной работы тултип?
Насчет корректной работы с 1.2.6 надо смотреть на сайте автора плагина
http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
возможно, что под 1.2.6 были какие-либо доработки в самом плагине… В любом случае лучше все-таки использовать версию плагина посвежее.
Господа, может кто подскажет….
Возникла следующая проблема : Создана страничка на которой подсказки реализованы с применением jQuery : tooltip , в мозилле или опере все работает просто замечательно, а вот в Ие столкнулся со следующей проблемой, если просто открывать страничку, то все гуд, а если подгружать в iframe, то при наведении мышкой подсказка не выводится… выводится только если кликать правой кнопкой мыши, но тогда и контекстное меню выводится… как победить проблему с iframe в IE ?
Алексей, я в отпуске сейчас. Давайте после 22-го числа… Если раньше никто не подскажет что-то
Такой вопрос, а где настроить отступы подсказки? Пробовал прописывать опции left и top, не помогло, так же в jquery.tooltip.js менял те же стандартные параметры, тоже не помогло. Меняется только если увеличить значения, а мне надо что бы левый верхний угол подсказки находился на маленьком расстоянии от курсора, скажем 10 пикселей в сторону и 10 вниз.
Так же вопрос такой, я скрыл отображение url как описывалось выше, но все равно после описания остается пустая строчка, где ее убрать?
Знаете, у меня ощущение, что разработчик несколько забросил свое детище. Попробуйте посмотреть аналогичный плагин – jQuery Cluetip – очень удачный.
а где, собственно, сайт разработчика?
В исходном коде плагина ес-но. Но специально для Вас http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
А можно ли как-нибудь сделать кнопку, при нажатии на которую можно было включить/выключить подсказки?)
to Андрей
можно, используйте $.tooltip.block();
могу показать рабочий пример.
to Gennady
а можно как-нибудь сделать что-бы часть подсказок отключать?
To wall:
Можно не включать подсказки там, где они не нужны…
Простой пример. Если написать так:
$("a").tooltip();то подсказки будут работать на всех элементах а веб-страницы.
А если написать:
$("a.example").tooltip();то подсказки будут только на элементах а, у которых есть класс example.
Извините за оффтоп, в теме про autocomplete нет возможности добавлять комментарии.
Вопрос по поводу onItemSelect
в оф. описании http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions нет не слово про эту функцию. И она у меня со скаченым оттуда скриптом не работала.
Скаченный с Вашего сайта скрипт заработал как надо, но заметно, что он немного отличается. В чем дело? Спасибо за ответ
Обратите внимание на дату той статьи – 26 февраля 2008 года. Этой статье скоро будет 2 года
Автокомплит сильно изменился… Пора писать новую статью?
Я не в претензии – просто дата действительно выпла из поля зрения. А изменился выходит довольно сильно – допустим появилось свойство Scroll – но пропало свойство onItemSelect – добавились какие-то функции кроме autocomplete – пока не разобралась, что с ними делать.
Статья была бы реально полезна. Спасибо!
To Gennady:
так не сработает. Есть два элемента, на 1 подсказка всегда должна работать на 2 только после определенного действия. Замена, удаление атрибута class id ничего не дает. Думаю получиться если использовать $.tooltip.block() при наведении мышки на первый элемент ))
Еще вопрос как отключить вывод атрибута href в подсказке?
В опциях передать showURL: false
если повесить $.tooltip.block() на onmouseover на том элементе где подсказка нужна постоянно, вроде бы получается хорошо, но при отключении на onmouseout подсказка остается на экране.
Сегодня обнаружил интересную особенность работы tooltip.
Например у Вас tooltip должен применяться ко всем элементам на странице.
Так вот, попробуйте, к примеру, вынести функцию $(function() {
$(‘*’).tooltip({delay:100,track:true,showURL:false,opacity:0.85});
});
в отдельную функцию, например testfunc() и выполнить её 2 раза.
Зачем это нужно? Ну вот Вы к примеру “подргрузили” часть содержимого с помощью $.ajax() и в этом содержимом у Вас есть элементы, к которым тоже нужно применить tooltip. Как это сделать? ещё раз вызвать функцию testfunc().
Так вот после второго вызова у нового “вставленного” содержимого подсказки будут, а вот все старые исчезнут!
Решение заключается в другой конструкции:
$(‘*’).each( function () {
if (this.title != ”) $(this)tooltip({delay:100,track:true,showURL:false,opacity:0.85});
});
В этом случае tooltip применится только к тем элементам, к которым он ещё не применялся. Тогда будут и новые и старые подсказки.
Здравствуйте; спасибо за плагин.
Правда, не понял, зачем библиотека jquery.dimensions.js – без нее кажется нормально работает..
Ну, и есть еще вопросик, естественно: если использовать тег img
то из scr=’images/file_x.png’ – название файла выводится ниже подсказки, в диве том – ну, тоесть, строкой ниже после титла:
—————-
Подсказка
элемент input – текстовое поле ввода данных.
images/file_x.png
—————-
вот так вот выводится – как убрать, как в примере с ссылкой href (мол, showURL: false – есть похожая функция)?
СПСБ.
Хм, ото в jquery.tooltip.js
потом нашел функцию, строка примерно 87:
url: function() {
return this.attr(‘href’) || this.attr(’src’);
}
а потом нашел ниже определение для showURL
и выше коммент:
// if element has href or src, add and show it, otherwise hide it
Не знаю, наверное где-то вначале ошибся при формировании кода (и наверное пару раз )) ), но showURL: false – и для скрина, выходит, тоже подходит…
Сорри за ложную тривогу..
Allex, статья очень старая – посмотрите на версию библиотеки, которая используется в примере (поэтому и dimensions.js)…. Отыщите свежую версию плагина – наверняка там огромное количество изменений за 2 с лишним-то года…
А что касается конкретных вопросов по работе каких-либо плагинов, то их лучше задавать на форуме (ссылка вверху страницы).
P.S. А комментирование этой статьи пожалуй пора закрывать