首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在primefaces中单击ESC(转义)时关闭所有对话框

在primefaces中单击ESC(转义)时关闭所有对话框
EN

Stack Overflow用户
提问于 2012-10-26 14:49:13
回答 2查看 3.7K关注 0票数 5

我正在使用4-5个primefaces对话框。当单击ESC时,我想关闭所有打开的对话框。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-26 15:14:37

通过widgetVar指定的客户端对象调用对话框的hide()函数。因此,如果你这样定义你的p:dialog

代码语言:javascript
运行
复制
<p:dialog widgetVar="dialog1" header="Dialog 1"/>
<p:dialog widgetVar="dialog2" header="Dialog 2"/>

您的ESC按钮应如下所示:

代码语言:javascript
运行
复制
<p:commandButton value="ESC" onclick="dialog1.hide();dialog2.hide()"/>

你也可以创建一个可重用的p:remoteCommand来关闭你所有的对话框,并在你的p:commandButtonp:hotkey中使用它--如果“点击退出”你的意思是点击退出按钮:

代码语言:javascript
运行
复制
<p:remoteCommand name="closeAll" onsuccess="dialog1.hide();dialog2.hide()"/>

然后在您的组件中引用closeAll()命令:

代码语言:javascript
运行
复制
<p:hotkey bind="esc" handler="closeAll()"/>
<p:commandButton value="ESC" onclick="closeAll()"/>
票数 4
EN

Stack Overflow用户

发布于 2014-06-04 16:02:02

虽然这篇文章很旧,但答案是一个相当静态的解决方案,这里是一个使用jQuery的动态解决方案。

代码语言:javascript
运行
复制
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()

希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13082118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档