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>click на элемент только после клика onclick на нем, а не при созданием документа.true или falseelements[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);
}