JQuery - некоторые проблемы с меню

У меня есть меню с тегами 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();
});

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


person Max Frai    schedule 12.10.2009    source источник


Ответы (2)


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

$('#inner a').live( 'click', function() {
   var target = this.href.split('#')[1];
   $('#head_menu a[href*=' + target  + ']').click();
});
person Kobi    schedule 12.10.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();
        });
    });
});

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

person Russ Cam    schedule 12.10.2009