Трудно понять как работает решение, но, похоже что спроектировано неверно.
По-хорошему нужно переделать архитектуру, чтобы вы открывали модалку и передавали туда конкретное значение (в вашем случае URL), и тогда модалка отвяжется от конкретной разметки, и не будет проблем с пробросом значений.
Если архитектуру нельзя поменять, тогда нужно чтобы значение было общим, и так как это всего лишь слушатель, то оно должно быть снаружи от него, т.е. во внешней области видимости, либо в каком-то отдельном хранилище.
Если простое решение, то можно сделать через замыкание, т.е. делается IIFE (функция, которую объявили и сразу же вызвали), внутри неё создается переменная, и возвращается вам слушатель, и тогда из слушателя можно будет перезаписывать эту внешнюю переменную.
element.addEventListener('click', function () {
var sharedVariable;
return function () {
sharedVariable = 1; // Здесь переменная всегда доступна для чтения и записи
}
}());
В любом случае рекомендую менять архитектуру.
Как еще один простой вариант, это, хотя бы, можно сделать функцию openModal, и вызывать её при клике на ссылку. Она установит значение в разметке модалки, и откроет модалку, а дальше вы выберете нужный элемент из разметки и получите актуальную ссылку.