jsf - Primefaces 带有 closeOnEscape 的多个对话框
问题描述
我有 2 个对话框(A 和 B)closeOnEscape="true"
。
两个对话框都是模态的并且有<p:focus context="innerForm" />
内部。
对话框 A 打开了对话框 B。是的,我知道,这是一个糟糕的设计,但是......
问题是,当我在对话框 B 上按 ESC 时,它会正确关闭并焦点返回到对话框 A,但 ESC 不会关闭此对话框。
解决方案
这是一个错误,已在 GitHub 上向 PrimeFaces 报告: https ://github.com/primefaces/primefaces/issues/6677
公关:https ://github.com/primefaces/primefaces/pull/6678
将在 PF 9.0 中
将此添加到在 PF 之后加载的 JS 中以立即修复它:
if (PrimeFaces.widget.Dialog) {
PrimeFaces.widget.Dialog.prototype.bindEvents = function() {
var $this = this;
//Move dialog to top if target is not a trigger for a PrimeFaces overlay
this.jq.on("mousedown", function(e) {
if (!$(e.target).data('primefaces-overlay-target')) {
$this.moveToTop();
}
});
this.icons.on('mouseover', function() {
$(this).addClass('ui-state-hover');
}).on('mouseout', function() {
$(this).removeClass('ui-state-hover');
}).on('focus', function() {
$(this).addClass('ui-state-focus');
}).on('blur', function() {
$(this).removeClass('ui-state-focus');
});
this.closeIcon.on('click', function(e) {
$this.hide();
e.preventDefault();
});
this.maximizeIcon.on("click", function(e) {
$this.toggleMaximize();
e.preventDefault();
});
this.minimizeIcon.on("click", function(e) {
$this.toggleMinimize();
e.preventDefault();
});
if (this.cfg.closeOnEscape) {
$(document).on('keydown.dialog_' + this.id, function(e) {
var keyCode = $.ui.keyCode;
if (e.which === keyCode.ESCAPE && $this.isVisible()) {
var active = parseInt($this.jq.css('z-index')) === parseInt($('.ui-dialog:visible').last().css('z-index'));
if (active) {
$this.hide();
}
};
});
}
};
}
推荐阅读
- python - AttributeError:“工作簿”对象没有属性“写入”
- angular - 即使启用了 gzip 压缩,Nginx 服务器也不会读取 Gzip 文件
- python - 在 Numpy 中应用不带 for 循环的非平凡矩阵计算
- javascript - 如何替换数组中的元素?
- java - 通知意图 - 如何在不重置的情况下恢复通知中的活动?
- dart - Dart BrowserClient 中的响应标头
- c - 为什么函数看不到“NULL”字符
- c++ - 网络重置后客户端通道不可用
- amazon-web-services - 如何将我在 s3 中的预签名 URL 存储桶连接到云端
- r - R中用于计算过程表单数据的分层对数秩检验?