2016-06-11 3 views
0

У меня есть простая лайтбокс на странице, где у иконки закрытия есть класс .closeIt. Когда пользователь нажимает на значок закрытия, я хочу переместить фокус обратно на элемент ссылки, который вызвал лайтбокс.jQuery: Lightbox закрывает обработку событий

Я попытался добавить некоторую функцию, которая берет входную информацию о вызывающей ссылке и имени класса закрывающего значка.

function focusBack(triggeringLinkId,closingLinkClass){ 
    $(closingLinkClass).click(function() { 
     $(triggeringLinkId).focus(); 
    }); 
    } 

и для каждого лайтбокса, я вручную называется функцией назад, как это:

focusBack('#someLink','.closeIt') 

этот подход отлично работает, если у меня есть только один осветителя на странице, но если у меня есть больше, чем один лайтбоксов , он начинает привязывать его к последней вызываемой функции, и теперь, когда бы я ни закрывался, фокус возвращается к триггерной ссылке, для которой я последний раз вызывал функцию focusBack.

Каков наилучший подход к решению этой ситуации?

+0

Я не знаю, является ли добавление или удаление кнопки для прослушивания нажатием кнопки «закрыть», это хорошая идея или нет, потому что вы можете переопределить другие действия над кликом. Однако вы можете использовать '$ (closedLinkClass) .off (« click »)', чтобы удалить прослушиватель кликов после каждого фокуса. –

ответ

0

Я использовал эту работу вокруг, чтобы решить эту проблему:

function focusBack(triggeringLinkId,closingLinkClass){ 
$(triggeringLinkId).click(e){ 
    $(e.target).addClass('triggeringLinkClass'); 
} 
$(closingLinkClass).click(function() { 
    $(triggeringLinkClass).focus(); 
    $(triggeringLinkClass).removeClass('triggeringLinkClass'); 
}); 
} 

Я не думаю, что это лучший подход, но решить эту проблему для меня.