Ответ от DannyLane и SLaks очень полезен. Мне понадобилось вечно, чтобы найти причину моей ошибки. У меня есть модальное всплывающее окно (AjaxControlToolkit, ModalPopupExtender, со стилем Bootstrap) с кнопкой отмены. Тем не менее, похоже, что пользователю пришлось дважды щелкнуть, чтобы закрыть всплывающее окно. Глядя на источник, все события правильно подключены.
Оказывается, что, как описано в документации jQuery, мое событие нажатия мыши было на элементе кнопки отмены, но событие OnBlur в другом месте вызвало смещение макета (для отображения ошибки проверки), и оказалось, что мышь -up событие заканчивается на элементе, который он начал. Следовательно, событие click не срабатывает. См. Рисунок для графического объяснения.
Мое исправление, поскольку у меня слишком много всплывающих окон, чтобы иметь дело с ними одно за другим, это использовать событие mousedown
Я связываю все мои «неосновные кнопки внутри моего модального», т.е. мои кнопки отмены ('.modal-content .modal-footer a: not (.btn-primary)'.
Когда запускается mousedown, я получаю ближайший родительский элемент, представляющий мой всплывающий элемент DIV (все они являются «.modal-content.modalPopup») для меня.
А потом я пытаюсь найти КОМПОНЕНТ Ajax, который представляет всплывающее окно. Это не DIV, это
ModalPopupExtender обычно представлен как BehaviorId, но так как у меня нет этого BehaviorId, я использую единственный найденный способ, чтобы получить его, просматривая все компоненты.
Затем я могу вызвать метод Ajax Hide (), отличный от jQuery hide ().
Торги:
Sys.Application.add_load(function () {
var cancel = jQuery('.modal-content .modal-footer a:not(.btn-primary)');
cancel.mousedown(function () {
var popup = jQuery(this).closest('.modal-content.modalPopup')[0];
if (popup) HidePopupByPopupDiv(popup.id);
});
//cancel.css('background-color', 'red'); //debug to see my cancel buttons hooked up
});
и способ сокрытия:
function HidePopupByPopupDiv(popupPanelDivId) {
var c = Sys.Application.getComponents();
for (var i = 0; i < c.length; i++) {
if (c[i].get_PopupControlID && c[i].get_PopupControlID() == popupPanelDivId)
c[i].hide();
}
}