Не моги открывать соединение в меню

в конце концов, когда click он не может открывать соединение (<a href="www.google.com">)

$('.menu-lateral .sub-menu').hide();
	
$('.menu-lateral li a').click(function(){
event.preventDefault();
$(this).siblings('.sub-menu').slideToggle('slow');
});
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu-lateral">

    <li><a href="#">Menu 1</a>

        <ul class="sub-menu">

            <li><a href="#">Sub Menu 2</a>

                <ul class="sub-menu">

                    <li><a href="#">Sub sub Menu 3</a>

                        <ul class="sub-menu">

                            <li><a target="_blank" href="www.google.com">Titulo no puede abrir link :( </a></li>

                        </ul>

                    </li>

                </ul>

            </li>

        </ul>

    </li>

</ul>
2
задан 05.01.2017, 21:35
0 ответов

Сначала:

  • event.preventDefault (); то, что он делает, состоит в том, чтобы избегать того, чтобы он сделал действие, которое обычно делает, чтобы заменять ее действием рукописного шрифта. Следовательно удали эту линию
  • url должен быть таким: href = "http://www.google.com" или а ты это будешь искать внутри твоего домена.

Я оставляю тебе твой измененный код:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu-lateral">

    <li><a href="#">Menu 1</a>

        <ul class="sub-menu">

            <li><a href="#">Sub Menu 2</a>

                <ul class="sub-menu">

                    <li><a href="#">Sub sub Menu 3</a>

                        <ul class="sub-menu">

                            <li><a  href="http://www.google.com" target="_blank">Titulo</a></li>

                        </ul>

                    </li>

                </ul>

            </li>

        </ul>

    </li>

</ul>

<script>
$('.menu-lateral .sub-menu').hide();
	
$('.menu-lateral li a').click(function(){

$(this).siblings('.sub-menu').slideToggle('slow');
});
</script>
2
ответ дан 03.12.2019, 17:51

Это происходит, потому что твой селектор очень характерный. Сделав:

$('.menu-lateral li a').click(function(){......

ты выбираешь все ссылки (a), что были внутри одного li внутри .menu-lateral. Не определяя на каком уровне. Это делает, что он применяется ко всем ссылкам внутри li. И как у тебя есть один event.preventDefault() не будет работать действие ссылки.

Например, твоя структура - нечто похожее:

ul.menu-lateral
   li
       a   <------------- el selector afectará a este link
       ul
           li
                a  <----- y también a éste

Для того, чтобы он сделал то, что ты ищешь, ты был бы должен делать самый специфический селектор, используя > что значит, что он будет прямым потомком. В этом случае, селектор, который ты хочешь использовать, был бы таким:

$('.menu-lateral > li > a').click(function(){

И с твоей структурой он был бы выбран так:

ul.menu-lateral
   li
       a   <------------- el selector afectará a este link y sólo a éste
       ul
           li
                a  

Обновление: как у твоего меню есть субуровни, селектор, который я предлагаю наверху, не будет функционировать правильно. То, что ты можешь делать, cromprobar, если нажатая ссылка - узел лист (у него нет больше субуровней), и если он это не, выполнять код. Таким образом, если это будет узел лист, он будет работать пойдет в href обычно.

Чтобы подтверждать, есть ли у него субменю, ты был бы должен подтверждать, есть ли у какого-либо из Ваших братьев класс "суб-меню" используя .siblings(".sub-menu").

Здесь я оставляю тебе пример (он ощущается, что я прекратился target="_blank" и исправленный унифицированный указатель ресурса... и все же оно не будет функционировать по причине безопасности):

$('.menu-lateral .sub-menu').hide();

$('.menu-lateral li a').click(function(event){
  if ($(this).siblings(".sub-menu").length > 0) { 
    event.preventDefault();
    $(this).siblings('.sub-menu').slideToggle('slow');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu-lateral">
  <li><a href="#">Menu 1</a>
    <ul class="sub-menu">
      <li><a href="#">Sub Menu 2</a>
        <ul class="sub-menu">
          <li><a href="#">Sub sub Menu 3</a>
            <ul class="sub-menu">
              <li><a href="http://www.google.com">Titulo no puede abrir link :( </a></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>
3
ответ дан 03.12.2019, 17:51
  • 1
    хороший пример, Спасибо за объяснение мне. –  05.01.2017, 21:45
  • 2
    это селектора он не повредит его, потому что он пробовал открывать новое субменю, но что не существует. с которым я снял event.prevent и обновил соединение уже он оно будет функционировать –  05.01.2017, 21:46
  • 3
    Я заканчиваюсь догадываться, что у твоего примера есть два уровня menú. Селектор не serí в точно равный тому, которого я поместил тебе. Podrí схвати делать что-то как $('.menu-lateral > li > a, .menu-lateral > li > ul > li > a').click(function(){ .... , но podrí чтобы затрагивать негативно, если есть menú s без третьего уровня –  05.01.2017, 21:46
  • 4
    @AlexisGranja Sí и нет. Если menú не está в верхней части pá gina sí что afectará потому что после того, как имели href="#" scroll desplazará в верхнюю часть экрана (другая история serí если у него были href="javascript:void(0)") –  05.01.2017, 21:48
  • 5
    Если также, но в é ste случай не затрагивает его, если в любом случае если не estará в начало, так как он добавляет его href =" javascript:void (0) " или añ ade класс и он использует ее –  05.01.2017, 21:53

Главным образом, потому что ты избегаешь того, чтобы он это сделал

event.preventDefault();

в эту последнюю ссылку ты можешь размещать класс

<a class="liga" target="_blank" href="www.google.com">Titulo no puede abrir link :( </a>

и в js ты можешь делать

if(!this.hasClass('liga'))
    event.preventDefault();
1
ответ дан 03.12.2019, 17:51
<li><a target="_blank" href="http://www.google.com">Titulo SÍ puede abrir link :) </a></li>

И ты это удаляешь: event.preventDefault();

1
ответ дан 03.12.2019, 17:51