当我使用添加到 header 的按钮时,如何防止手风琴面板折叠?
How to prevent Accordion Panel from collapsing when I use button added to header?
我的手风琴面板有问题。我有类似这样的手风琴:
<p:accordionPanel>
<p:tab title="tabTitle">
<f:facet name="title">
<!-- problematic button -->
<p:commandButton value="button"/>
</f:facet>
<h:PanelGrid>
<p>Accordion content</p>
</h:panelGrdi>
</p:tab>
</p:accordionPanel>
问题是 - 当我单击该按钮时,整个手风琴选项卡将折叠。
我的问题是:如何防止 Accordion 在单击按钮时折叠?同时,当我点击 header 但在按钮之外时,我希望手风琴折叠。
我正在使用 PrimeFaces 5.3 和 JSF 2.2.11
取消绑定 headers 的所有事件,然后调用组件的 init
方法再次绑定它们。
<p:accordionPanel widgetVar="myAccordion">
<p:tab title="tabTitle">
<f:facet name="title">
<!-- problematic button -->
<p:commandButton value="button"
onclick="PF('myAccordion').jq.find('.ui-accordion-header').unbind()"
oncomplete= "PF('myAccordion').init(PF('myAccordion').cfg)"/>
</f:facet>
<h:PanelGrid>
<p>Accordion content</p>
</h:panelGrdi>
</p:tab>
</p:accordionPanel>
正如@JorgeCampos 所建议的那样 - 我们可以使用 event.stopPropagation() 来防止事件从按钮到手风琴 "bubble"。有问题的代码的用法如下所示:
<p:accordionPanel>
<p:tab title="tabTitle">
<f:facet name="title">
<p:commandButton value="button" onclick="event.stopPropagation();"/>
</f:facet>
<h:PanelGrid>
<p>Accordion content</p>
</h:panelGrdi>
</p:tab>
</p:accordionPanel>
我们当然可以使用其他事件来做其他事情,或者使用actionListener
从ManagedBean中调用方法,使用update
。例如
<p:commandButton
value="button"
onclick="event.stopPropagation();"
oncomplete="PF('someDialog').show();" <!-- open dialog by js -->
actionListener="#{someBean.someMethod}" <!-- call java method -->
update="someComponent" <!-- update component -->
/>
停止事件传播不会干扰
我的手风琴面板有问题。我有类似这样的手风琴:
<p:accordionPanel>
<p:tab title="tabTitle">
<f:facet name="title">
<!-- problematic button -->
<p:commandButton value="button"/>
</f:facet>
<h:PanelGrid>
<p>Accordion content</p>
</h:panelGrdi>
</p:tab>
</p:accordionPanel>
问题是 - 当我单击该按钮时,整个手风琴选项卡将折叠。
我的问题是:如何防止 Accordion 在单击按钮时折叠?同时,当我点击 header 但在按钮之外时,我希望手风琴折叠。
我正在使用 PrimeFaces 5.3 和 JSF 2.2.11
取消绑定 headers 的所有事件,然后调用组件的 init
方法再次绑定它们。
<p:accordionPanel widgetVar="myAccordion">
<p:tab title="tabTitle">
<f:facet name="title">
<!-- problematic button -->
<p:commandButton value="button"
onclick="PF('myAccordion').jq.find('.ui-accordion-header').unbind()"
oncomplete= "PF('myAccordion').init(PF('myAccordion').cfg)"/>
</f:facet>
<h:PanelGrid>
<p>Accordion content</p>
</h:panelGrdi>
</p:tab>
</p:accordionPanel>
正如@JorgeCampos 所建议的那样 - 我们可以使用 event.stopPropagation() 来防止事件从按钮到手风琴 "bubble"。有问题的代码的用法如下所示:
<p:accordionPanel>
<p:tab title="tabTitle">
<f:facet name="title">
<p:commandButton value="button" onclick="event.stopPropagation();"/>
</f:facet>
<h:PanelGrid>
<p>Accordion content</p>
</h:panelGrdi>
</p:tab>
</p:accordionPanel>
我们当然可以使用其他事件来做其他事情,或者使用actionListener
从ManagedBean中调用方法,使用update
。例如
<p:commandButton
value="button"
onclick="event.stopPropagation();"
oncomplete="PF('someDialog').show();" <!-- open dialog by js -->
actionListener="#{someBean.someMethod}" <!-- call java method -->
update="someComponent" <!-- update component -->
/>
停止事件传播不会干扰