Скрипт не меняет класс при клике

307
09 января 2017, 23:18

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

<div id="menu">
  <ul id="menuHead">
    <li>
      <a href="/news" target="_top" class="newmessage">Новости</a>
    </li>
    <li class="active">
      <a href="/profile" target="_top">Обзор</a>
    </li>
    <?
      $usid=$ _SESSION[ "user_id"]; 
      $db->Query("SELECT * FROM ".$pref."_pm WHERE user_id_in = '$usid' AND status = 0 AND inbox = 1");
      $sk = $db->NumRows();
      if ($sk > 0) {
        $pmm = '<font color="red">('.$sk.')</font>';
      } else {
        $pmm = '<font color="red">(0)</font>';
      }
    ?>
    <li>
      <a href="/msg" target="_top" id="msgmenu">Сообщения <?=$pmm; ?></a>
    </li>
    <li>
      <a href="/hideout" target="_top">Пещера</a>
    </li>
    <li>
      <a href="/city" target="_top">Город</a>
    </li>
    <li>
      <a href="/robbery" target="_top">Охота</a>
    </li>
    <li>
      <a href="/stats" target="_top">ТОП-лист</a>
    </li>
    <li class="free-space ">
      <a href="/contats" target="_blank">Поддержка</a> 
    </li>
    <li>
      <a href="/logout" target="_top">Выйти из игры</a>
    </li>
    <li id="doc_time">
      <script type="text/javascript">
        clock();
      </script>
    </li>

    <script type="text/javascript">
      var currentPage = $('#menuHead .active').text();
      $('#header h1').text(currentPage);
      $(document).ready(function() {
        $('#menuHead li').live('click', function() {
          $('#menuHead .active').removeClass('active');
          $(this).addClass('active');
        });
      });
    </script>
  </ul>
</div>
Answer 1

Попробуй так:

<script type="text/javascript">
  var currentPage = $('#menuHead .active').text();
  $('#header h1').text(currentPage);
  $(document).ready(function() {
    $('#menuHead').on('click', 'li', function(e) {
      e.preventDefault();
      $('#menuHead .active').removeClass('active');
      $(this).addClass('active');
    });
  });
</script>
Answer 2

var currentPage = $('#menuHead .active').text(); 
$('#header h1').text(currentPage); 
 
$(document).ready(function() { 
  $('#menuHead a').on('click', function(e) { 
    e.preventDefault(); 
     
    var $this = $(this), 
        item = $(this).closest('li'); 
     
    if(!item.hasClass('active')){ 
      item.addClass('active') 
          .siblings() 
          .removeClass('active'); 
    }else { 
      item.removeClass('active'); 
    } 
  }); 
});
/* для наглядности */ 
.active { 
  background: #ccc; 
}
<script src="https://code.jquery.com/jquery-2.0.3.js"></script> 
   
<div id="menu"> 
  <ul id="menuHead"> 
    <li> 
      <a href="/news" target="_top" class="newmessage">Новости</a> 
    </li> 
    <li class="active"> 
      <a href="/profile" target="_top">Обзор</a> 
    </li> 
    <li> 
      <a href="/msg" target="_top" id="msgmenu">Сообщения <?=$pmm; ?></a> 
    </li> 
    <li> 
      <a href="/hideout" target="_top">Пещера</a> 
    </li> 
    <li> 
      <a href="/city" target="_top">Город</a> 
    </li> 
    <li> 
      <a href="/robbery" target="_top">Охота</a> 
    </li> 
 
    <li> 
      <a href="/stats" target="_top">ТОП-лист</a> 
    </li> 
 
    <li class="free-space "> 
      <a href="/contats" target="_blank">Поддержка</a>  
    </li> 
    <li> 
      <a href="/logout" target="_top">Выйти из игры</a> 
    </li> 
    <li id="doc_time"> 
       
    </li> 
  </ul> 
</div>

Answer 3

Переход на страницу не стопорится потеряли return false и переход получается с обновлением всей страницы, а js так не умеет сохраняться, он может сохраняться до перезагрузки страницы, чтобы и это избежать, придется сделать на сервере, а для этого нужно сделать условие на каждую li.

<?php
   $url = isset($_GET['page'])?$_GET['page']:'';
?>
<li class="<?='/news'===$url?'active':''?>">

Ну думаю как заметили - это как минимум в ручную проставлять, так делать не есть гуд, но это ваше решение.

Советую смотреть в эту сторону:

<?php
$pages = array(
    'news' => array('Новости'),
    'profile' => array('Профиль'),
    'disableLink' => array('Выключенная кнопка', false)
);
function menu(array $array) {
    $menu = '';
    if ($array) {
        $url = filter_input(INPUT_GET, 'page');
        foreach ($array as $key => $value) {
            $class = isset($value[1]) && is_bool($value[1]) && !$value[1] ? 'disable' : '';
            if (!$class) {
                if ($url === $key) {
                    $class = 'active';
                    $key = '#';
                }
            }
            $class = $class ? ' class="' . $class . '"' : '';
            $menu .= '<li' . $class . '>
                        <a href="' . $key . '">
                            ' . $value[0] . '
                        </a>
                    </li>';
        }
    }
    return $menu;
}
?>
<ul>
    <?= menu($pages) ?>
</ul>
READ ALSO
RegEx для захвата содержимого перед первой &#39;{&#39; и последней &#39;}&#39;

RegEx для захвата содержимого перед первой '{' и последней '}'

Вот понадобился RegEx для захвата всего содержимого между (но не включая сами "{" и "}") первой "{" и последней "}", то есть в тексте могут ещё встречаться...

275
Facebook Scraper извлекает неправильные OG теги из моих веб-страниц

Facebook Scraper извлекает неправильные OG теги из моих веб-страниц

Кнопка "поделиться", на моем сайте, работает неправильноОна грузит название на языке, который я не указывал в мета-теге

394
Почему появляется ошибка undefined?

Почему появляется ошибка undefined?

Почему выводит undefined?

369