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);
}