2013-07-22 58 views
0

我正在學習JSF,並希望將其與jQuery集成。但由於頁面是自行刷新的,因此無法正常工作。我也試過e.preventDefaulte.stopPropagation,但沒有成功。如何停止在JSF中刷新頁面的jQuery函數?

這裏是jQuery代碼:

$(document).ready(function(){ 
    $("#form2\\:button1").click(function(){ 
     $("#form2\\:div1").toggle("slow",function(e){ 
      //e.preventDefault; 
      //e.stopPropagation; 
      return false; 
     }); 
    }); 
}); 

,這裏是部分的xHTML:

<h:form name="form1" id="form2"> 
    <h:outputLabel value="Enter Date"></h:outputLabel> 
    <h:inputText value="#{test.date }"></h:inputText> 
    <h:commandButton action="#{test.doWork}" value="Submit Form"></h:commandButton> 
    <h:button id="button1" value="Action"></h:button> 
    <h:panelGroup layout="block" id="div1"> 
     <h:commandLink id="link1" value="Edit Details"></h:commandLink> 
     <h:commandLink id="link2" value="Manage mails" > </h:commandLink> 
    </h:panelGroup> 
</h:form> 

我想上#button1應用jQuery函數。

回答

0

根據文檔,<h:button>標籤

呈現類型的 「按鈕」 的HTML 「輸入」 元素。組件的值呈現爲按鈕文本,組件的結果用於確定由onclick激活的目標URL ...如果此結果(結果)爲空,則讓結果爲當前UIViewRoot的viewId

換句話說,該標籤產生用JavaScript重定向一個input元件(通過指定window.location.href),以在其outcome屬性中指定的導航的情況下的結果,或者,到當前頁面的情況下outcome屬性未指定 。所以,現在你應該明白爲什麼頁面刷新了。

如果你不想重定向發生,剛剛從onclick方法返回false,像這樣:

<h:button id="button1" value="Action" onclick="$('#form2\\:div1').toggle('slow');return false;"/> 

這同樣適用於你的jQuery代碼。

否則,您可以簡單地考慮使用普通的HTML <button>標籤來實現預期的效果。

0

更新: 感謝您指出我的錯誤!

事件的預防應發生在onclick回調中,而不是toggle回調中。

試試這個。

$(document).ready(function(){ 
    $("#form2\\:button1").click(function(){ 

     $("#form2\\:div1").toggle("slow"); 

     //e.preventDefault; 
     //e.stopPropagation; 
     return false; 
    }); 
}); 

這是小提琴:http://jsfiddle.net/PNcZS/1/

+0

不幸的是,你對JSF不熟悉,所以你的回答是錯誤的。 JSF將所討論組件的id作爲'form2:button1'呈現,並且它不像所有人想象的那樣是所有'button'元素的選擇器。最後,根本不會顯示'button'元素,但'input'元素將會被渲染。 – skuntsel

+0

的確,我忘記了在JSF中命名容器。我的錯。我將更新小提琴以反映jsf呈現的html的更改。點擊事件的觀點仍然存在? – Nefreo

+0

確定它:) – skuntsel