2017-02-13 55 views
0

我遇到了手風琴面板問題。我已經手風琴與此類似:如何在使用按鈕添加到標題時防止摺疊手風琴板?

<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> 

問題是 - 當我按一下按鈕,整個手風琴Tab鍵將崩潰。

我的問題是:如何防止摺疊按鈕點擊手風琴?同時我希望手風琴在我點擊標題但在按鈕外面時摺疊。

我使用PrimeFaces 5.3和JSF 2.2.11

+1

這是有點複雜。這裏的問題在於,手風琴有一個綁定到它的點擊事件,並且手風琴內部的按鈕繼承了這種綁定,解決方案將成爲技巧。我在這裏看到兩種選擇,1 - 在手風琴外創建一個圖層,將按鈕放置在其上,並將其按照程序設置在手風琴上。 2-將代碼更改爲不傳播按鈕上的點擊事件。 –

+0

你想讓它打開,即使你點擊另一個元素? –

+0

@JorgeCampos - 你知道嗎?我怎麼才能達到不傳播click事件的效果? –

回答

0

至於有人建議通過@JorgeCampos - 我們可以使用event.stopPropagation()爲了防止事件「泡沫」的按鈕,手風琴。代碼的使用問題發表會看起來像這樣:

<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 --> 
/> 

回採事件傳播不會干涉

0

解除綁定所有頁眉的事件,然後將它們綁定再次調用您的組件的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> 
+0

非常感謝您爲這個解決方案,我已經測試它,它的工作原理,但我發現(根據評論下面的問題後)更簡單的解決方案使用'event.stopPropagation() onclick'行動 –

相關問題