2012-10-24 6 views
3

J'utilise les primitives 3.4, J'ai un p: calendar dans un p: overlaypanel. Lorsque je sélectionne une date, le panneau de superposition se ferme (lors de l'utilisation de Google Chrome) et lorsque vous utilisez Firefox lorsque je clique sur 'fermer' dans le calendrier, le panneau de superposition se ferme également.OverlayPanel + Calendar + Primefaces

Que puis-je faire pour résoudre ce problème?

Mon code est comme ceci:

<p:overlayPanel for="btnOP" hideEffect="fade"> 

    <p:panel id="panelTest"> 

     <p:calendar id="calendarOne" pattern="dd/MM/yyyy HH:mm" 
      value="#{bean.value}" showOn="button" validator="dateValidator"> 
     </p:calendar> 

    </p:panel> 

</p:overlayPanel> 
+0

Où est la forme placée? – siebz0r

+1

le est entre le formulaire .. Je me rends compte que lorsque je clique dans une partie du calendrier qui est hors de la superposition, cela se produit .. parce que lorsque je clique pour afficher le calendrier, une partie du le calendrier est affiché sur l'overlaypanel (c'est ok jusqu'ici, mais quand je clique sur une date dans cette partie, le overlaypanel se ferme) – jpedro

Répondre

0

cela doit probablement être résolu maintenant, mais de toute façon ce fut mon approche face à la même question. Mon balisage est presque identique (avec seulement un <div> supplémentaire autour du overlayPanel) et quelques recherches, j'ai trouvé ceci: sur le composant overlayPanel vous déliez le clic de la souris afin de ne pas fermer nativement:

onShow="$(document.body).unbind('mousedown.ui-overlay')" 

(Source: Don't hide OverlayPanel on click)

Ensuite, je l'ai écrit une coutume Javascript pour vérifier quel élément l'événement click cible et si la composante civile est visible, suit:

$(document).click(
    function(e) { 
     var target = e.target; 

     if (!$(target).parents().is('div#overlay-panel') && !$('div#ui-datepicker-div').is(':visible')) { 
      $('div.overlay-panel-classname').hide('fade', 100); 
     } 

    }); 

Cela est avéré travailler en douceur (avec quelques OTH améliorations que j'ai faites de mon côté mais c'est essentiellement ça).

EDIT:

En cas de peau, j'ai ajouté une déclaration toggleClass si cela ne plaisante pas avec le comportement du bouton de déclenchement:

$('div.verlay-panel-classname').hide('fade', 300, function() { 
    $(this).toggleClass('ui-overlay-hidden ui-overlay-visible'); 
});