Ну функция showModal проста и ужасна
function showModal(target) {
var opt = {
type: 'ajax',
scrolling: 'visible',
wrapCSS: 'get-modal'
};
if (typeof target === 'object') {
opt = $.extend(opt, target);
}
else {
opt.href = target;
}
$.fancybox(opt);
}
Она ничего не возвращает, поэтому мы не узнаем, когда открылась модальное окно, что бы обратиться к его кнопке закрытия.
Тут три варианта действий.
- Глубже изучить библиотеку fancybox в надежде, что у нее есть какие то события. Может есть событие открытия окна и тогда к кнопке обращаться только внутри этого события.
- Сделать после вызова showModal цикл с таймером и каждые, скажем, 100 мс проверять появилась эта кнопка или нет. Когда появится выполнить необходимые действия. Недостаток - если что то пошло не так, и fancybox не смог считать ресурс мы попадаем в бесконечный цикл. Но можно ограничить цикл, например, 8 секундами, и если через 8 сек кнопка не появилась, сказать, что произошла ошибка и сервер не отвечает.
- Перед вызовом showModal повесить на body MutationObserver и пусть он ждет, когда среди его дочерних элементов появится кнопка с заданным классом. Как появится - выполнить с ней необходимые действия.
Еще. При клике на эту кнопку задается
modalwin.style.display="none";
Не уверен, что это правильно. У fancybox скорее всего есть свой обработчик этой кнопки, который полностью убирает окно. Если он сработает первым, то окно уже не будет существовать. И это может вызвать ошибку.