5

私は 4 ~ 5 個のプライムフェイス ダイアログボックスを使用しています。ESCをクリックすると、開いているすべてのダイアログボックスを閉じます。

4

2 に答える 2

4

投稿は古いですが、答えはむしろ静的な解決策ですが、ここでは 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()

お役に立てれば。

于 2014-06-04T08:02:02.070 に答える
4

hide()で指定されたクライアント側オブジェクトを介して、ダイアログの関数を呼び出しますwidgetVar。したがって、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。「ESCAPE をクリックする」とは、Escape ボタンを押すことを意味する場合です。

<p:remoteCommand name="closeAll" onsuccess="dialog1.hide();dialog2.hide()"/>

次に、コンポーネントで次のcloseAll()コマンドを参照します。

<p:hotkey bind="esc" handler="closeAll()"/>
<p:commandButton value="ESC" onclick="closeAll()"/>
于 2012-10-26T07:14:36.660 に答える