Задать вопрос
@boooom

Не работает javascript — preventDefault как сделать?

Всем привет

Не могу запретить переход по ссылке через preventDefault, нужно для мобильной версии сайта

Проект: https://codepen.io/pavel-lipatkin/pen/aXJqPN

Написал скрипт, который как бы должен определить по id кнопку и запретить, но не работает. Быть может вы предложите лучше вариант реализации

function navFunction(id) {
    var elements = document.querySelectorAll(".noLink1");
    for (var i = 0; i < elements.length; i++) {
        (elements[i].id === id).addEventListener('click', function(e) {
            e.preventDefault();
            alert("ok");
        }, false);
    }
}

<li class="dropdown sort-2">
                        <a href="/template/category/" onclick="navFunction('nav-id-2')" class="dropbtn noLink1">Название категории (не должен перейти по ссылке)
                            <i class="fa fa-caret-down"></i>
                        </a>
                        <ul class="dropdown-menu" id="nav-id-2">
                            <li><a href="">Подкатегория</a></li>
                            <li><a href="">Длинное название подкатегории</a></li>
                            <li><a href="">Название подкатегории</a></li>
                        </ul>
                    </li>


Подскажите в чем может быть проблема?

Спасибо
  • Вопрос задан
  • 421 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@DanKud
Во-первых вы хотите повесить событие click на элемент только после клика onclick на нем, а не при созданием документа.
Во-вторых вы пытаетесь повесить событие на условие, результатом которого будет не объект, а значение true или false
Да и не совсем понятно для чего вообще вы пытаетесь поставить условие elements[i].id === id. Нужно просто прописать не внутри функции, а в основной части скрипта:

var elements = document.querySelectorAll(".noLink1");
for (var i = 0; i < elements.length; i++) {
    elements[i].addEventListener('click', function(e) {
        e.preventDefault();
        alert("ok");
    }, false);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
(elements[i].id === id).addEventListener(...)
А зачем навешивать слушатель на логическое значение? Результат операции === либо true, либо false.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы