на том же стаке есть хорошее решение:
$(document).on(
'click.bs.dropdown.data-api',
'[data-toggle="collapse"]', // тут прописываем селектор, который добавляем к тем .dropdown-menu, которые не должна закрываться по клику на внутренних элементах
function (e) { e.stopPropagation() }
);
получаем возможность использовать и штатное поведение, и нештатное.
причем, поскольку вызов делегированный, этот подход сработает и в том случае, если дропдаун-элемент был добавлен JS-ом.
п.с.: решение, которое отмечено сейчас как лучшее, блокирует поведение ссылок по умолчанию (неюзабельно, то есть) и жестко завязано на HTML-структуру (негибко, то есть).