Обновление (F5) не работает в диалоговом окне jQuery
-
18-09-2019 - |
Вопрос
Я использую виджет диалогового окна jquery для отображения модального окна.Однако при нажатии F5, когда модальное окно открыто, обновление не происходит.Есть идеи?
Интересное обновление:
Попробуйте эту демонстрацию: http://jqueryui.com/demos/dialog/#modal-messageТеперь, когда фокус находится на кнопке «ОК», обновление (F5) работает, однако когда кнопка не имеет фокуса, то и нет.
Обновление 2
На самом деле мы можем просто добавить любой элемент управления в диалоговое окно, установить высоту и ширину CSS на 0 и установить на него фокус, чтобы обновление заработало.Хотя это не лучшее решение.Я все еще пытаюсь заставить работать нажатие клавиш.
Обновление 3
Кажется, на данный момент работает следующее:
$(document).keydown(function(e)
{
if (e.which == 116) // key code of the F5 button
{
document.location.reload();
}
});
Решение
Кажется, это распространенная проблема, и я не нашел удовлетворительного ответа.Есть несколько похожих вопросов о переполнении стека, и лучший ответ, который я видел, - это захватить клавиши и запустить действие самостоятельно (это было для ввода, вызывающего кнопку, поэтому обновление f5 может быть сложнее). Я видел это сам в проект, над которым я тоже работаю.
Я подозреваю, что установка модального значения false может помочь, но я еще не пробовал.
Редактировать:
Я нашел это в строке 539 ui.dialog.js:
events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
Удаление нажатия клавиш и нажатия клавиш, похоже, позволило обычным клавишам браузера работать.Теперь мой выглядит так:
events: $.map('focus,mousedown,mouseup,click'.split(','),
Я не знаю, какую функциональность я бы удалил, сделав это.Кажется, единственное место, где используются события, - это строка 549:
$(document).bind($.ui.dialog.overlay.events, function(event) {
var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
return (dialogZ > $.ui.dialog.overlay.maxZ);
});
Было бы неплохо исправить это в официальной версии, если это возможно.
Другие советы
Диалоговое окно набирает клавишу F5, фиксируя событие нажатия клавиши и останавливая его распространение для «F5»?
Проверьте код на предмет захвата нажатия клавиш такого типа.Это бы многое объяснило!
У меня были похожие проблемы, но я обнаружил, что ввел «return false;», что останавливало регистрацию всех остальных ключей.Например, приведенный ниже «return false» остановит распознавание всех других клавиш (например, F5), кроме xxx и yyy.
$(document).keydown(function(e){
if (e.keyCode == xxx) {/*do something*/}
if (e.keyCode == yyy) {/*do something*/}
return false;
});
Так что просто уберите «return false».
Решение простое: вам просто нужно сосредоточиться на элементе формы модального диалогового окна.Больше объяснений по этому поводу связь :