Вы можете вызвать функцию .slideToggle()
, когда пользователь нажимает на пункт меню, чтобы он сбрасывал меню:
$('#menuBar').find('a').bind('click', function () {
$('#menuBar').slideToggle('fast');
});
Также я заметил кое-что еще, что вы можете изменить:
- Селекторам jQuery не требуется тип тега, поскольку вы выбираете идентификаторы, которые являются самым быстрым способом выбора объектов.Измените:
div#menuBar
/ a#menu
на: #menuBar
/ #menu
. - В HTML в вашем вопросе отсутствуют теги
<ul>
вокруг тегов <li>
.Панель навигации jQuery Mobile должна иметь следующий формат: <div data-role="navbar"><ul><li>...</li></ul></div>
(http://jquerymobile.com/demos/1.0/docs/toolbars/docs-navbar.html) - Поскольку вы используете один и тот же селектор несколько раз в одной и той же области видимости, вы можете кэшировать свой селектор jQuery и повторноиспользуйте его:
.
<script type="text/javascript">
$(function(){
var $menuBar = $('#menuBar');
//$menuBar.hide();//this is not necessary if you have the CSS for the #menuBar element to `display: none;`
$('#menu').click(function(){
$menuBar.slideToggle('fast');
return false;
});
$menuBar.find('a').bind('click', function () {
$menuBar.slideToggle('fast');
});
});
</script>
- ОБНОВЛЕНИЕ -
Вы можете немного изменить вышеуказанный код, чтобы приспособитьиспользование классов вместо идентификаторов:
<script type="text/javascript">
$('.menu').live('click', function(){
$.mobile.activePage.find('.menuBar').slideToggle('fast');
//you can also select the proper `.menuBar` element like this:
//$(this).find('.menuBar').slideToggle('fast');
return false;
});
$('.menuBar').find('a').live('click', function () {
$.mobile.activePage.find('.menuBar').slideToggle('fast');
//you can also select the proper `.menuBar` element like this:
//$(this).parents('.menuBar:first').slideToggle('fast');
});
</script>
Примечание: $.mobile.activePage
является ссылкой на текущую страницу для веб-сайта jQuery Mobile.Зная это, мы можем найти элементы DOM, которые соответствуют определенным классам только на текущей странице.
Также Примечание: я изменил вызовы .bind()
на .live()
, чтобы элементы, добавленные после начальной загрузки страницы, все равносвязываться с.Использование .live()
означает, что нам не нужно ждать запуска document.ready
, чтобы сделать наши привязки, поэтому $(function () {...});
не требуется.
ОБНОВЛЕНИЕ
Примечаниечто по состоянию на jQuery 1.7, .live()
было амортизировано.Новый API - .on()
, который можно использовать несколькими способами, поэтому вот пример его использования, например .live()
:
$(document).on('click', ".menuBar a", function () { ... });