我正在使用4-5个primefaces对话框。当单击ESC时,我想关闭所有打开的对话框。
发布于 2012-10-26 15:14:37
通过widgetVar
指定的客户端对象调用对话框的hide()
函数。因此,如果你这样定义你的p:dialog
:
<p:dialog widgetVar="dialog1" header="Dialog 1"/>
<p:dialog widgetVar="dialog2" header="Dialog 2"/>
您的ESC按钮应如下所示:
<p:commandButton value="ESC" onclick="dialog1.hide();dialog2.hide()"/>
你也可以创建一个可重用的p:remoteCommand
来关闭你所有的对话框,并在你的p:commandButton
或p:hotkey
中使用它--如果“点击退出”你的意思是点击退出按钮:
<p:remoteCommand name="closeAll" onsuccess="dialog1.hide();dialog2.hide()"/>
然后在您的组件中引用closeAll()
命令:
<p:hotkey bind="esc" handler="closeAll()"/>
<p:commandButton value="ESC" onclick="closeAll()"/>
发布于 2014-06-04 16:02:02
虽然这篇文章很旧,但答案是一个相当静态的解决方案,这里是一个使用jQuery的动态解决方案。
function escDialog() {
$(document).keyup(function(e) {
if (e.keyCode == 27) { // esc code is 27
closeAllDialog() ;
}
});
}
function closeAllDialog() {
for (var propertyName in PrimeFaces.widgets) {
if (PrimeFaces.widgets[propertyName] instanceof PrimeFaces.widget.Dialog ||
PrimeFaces.widgets[propertyName] instanceof PrimeFaces.widget.LightBox) {
PrimeFaces.widgets[propertyName].hide();
}
}
}
然后在你的document.ready中调用escDialog()
希望这能有所帮助。
https://stackoverflow.com/questions/13082118
复制相似问题