JQuery - некоторые проблемы с меню - PullRequest
0 голосов
/ 13 октября 2009

У меня есть меню с тегами a (ссылки). В Jquery я обрабатываю событие клика по частям меню ( a ) и затем показываю блок контента вниз. Все хорошо, но теперь я хочу сделать так, чтобы ссылки содержались в других частях меню.

<div id="head_menu">
   <a href="#order">1</a>
   <a href="#portfolio">2</a>
   <a href="#contacts">3</a>
   <a href="#vacancies">4</a>
   <a href="#about">5</a>
</div>

$('#head_menu a').click(function(){
   currentPage = this.href.split( '#' )[1];

   // If content area is already opened - close it
   if( $('#text').is(':visible') )
   {
      $('#text').slideUp();
   }

   $("#inner").load( 'static_page.php?page=' + currentPage, function() {
      $('#text').slideDown();
   });
});

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

<div id="inner"><a href="#about">link text</a></div>

Вот код JQuery:

$('#inner a').live( 'click', function() {
 $('#head_menu a[href*=' + document.location.hash + ']').click();
});

И после первого щелчка текущее меню контента скрывается и затем отображается с тем же контентом, но после второго щелчка я получаю то, что хочу: открывается новый контент из-за нажатого меню. Почему он срабатывает только после 2-го клика?

Ответы [ 2 ]

0 голосов
/ 13 октября 2009

Вы искали что-то подобное

$('#head_menu a').click(function(){
   var currentPage = this.href.substring(1);

    $('#text').slideUp();  

    $("#inner").load('static_page.php?page=' + currentPage, function() {
        $('#text').slideDown();
        $('#inner a').click(function() {
            var page = this.href.substring(1);
            $('#head_menu a[href*=' + page  + ']').click();
        });
    });
});

Не думаю, что полностью понимаю ваше описание, но я думаю, что это то, что вы ищете.

0 голосов
/ 13 октября 2009

document.location изменяется после первого клика (это имеет смысл, если подумать, поскольку вы можете использовать JavaScript для отмены кликов).
Попробуйте что-то похожее на то, что вы сделали с другой функцией (при условии, что она работает, и рассмотрите возможность ее перемещения в функцию - это дублированный код):

$('#inner a').live( 'click', function() {
   var target = this.href.split('#')[1];
   $('#head_menu a[href*=' + target  + ']').click();
});
...