2010-06-09 65 views
0

我用rich:inputNumberSpinner標記。如何從rich:inputNumberSpinner字段點擊enter按鈕時停止頁面刷新?

的問題是:

我設置光標焦點豐富的內部:inputNumberSpinner字段,然後我打回車鍵從我的鍵盤,到時候網頁會自動刷新。

但我不需要頁面刷新,當我從我的鍵盤按下輸入按鈕。

代碼:

spinnerTagTest.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %> 
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<f:view> 
    <html> 
     <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    
    </head> 
<body> 
     <h:form id="SpinnerForm">         
       <rich:inputNumberSpinner id="spinnerField" value="" />    
     </h:form> 
</body> </html></f:view> 

我也用豐富:熱鍵爲inputNumberSpinner場。但頁面刷新。

<rich:hotKey key="return" 
      selector="#spinnerField" 
      handler="event.stopPropagation();event.preventDefault(); 
      return false;"/> 

而且我使用javasccript檢查另一條路,但頁面刷新。

的具體標記和JavaScript是:

<rich:inputNumberSpinner id="spinnerField" value="" 
         oninputkeypress="return stopPageRefresh();"/> 

<script type="text/javascript"> 

    function stopPageRefresh() 
    { 
     return false; 
    } 
</script> 

在這裏,我使用一個警報消息內stopPageRefresh的()。
但我按回車鍵,首頁刷新,然後顯示警告消息。

幫我看看這個。 在此先感謝。

回答

1

我不是JSF專家,但我認爲問題只與客戶端JavaScript有關。

在幾個瀏覽器中,您使用onkeypress(在某些瀏覽器中,您可以在某些瀏覽器中,這是防止默認操作的唯一方法)使用cannot prevent default actions。無論如何,這是一個很大的混亂,瀏覽器之間的差異很大。

以下代碼會將相應的事件處理程序添加到spinnerField。在onload事件處理程序中運行它,或者至少在spinnerField之後進行渲染。

if (window.opera) 
    document.getElementById("spinnerField").onkeypress = noEnter; 
else 
    document.getElementById("spinnerField").onkeydown = noEnter; 

function noEnter(e) { 
    var event = e || window.event; 

    if (event.keyCode == 13) 
    return false; 
} 

更新:可能你必須設置在IE中cancelBubble屬性完全阻止提交有關輸入,但我不知道這一點。如果上面的例子並不在微軟的產品正常工作,將其替換noEnter

function noEnter(e) { 
    var event = e || window.event; 

    if (event.keyCode == 13) { 
    event.cancelBubble = true; 
    return false; 
    } 
} 
+0

感謝你的努力。 但我測試腳本內的一個警報消息。 刷新頁面後也會調用該警報。 – Eswar 2010-06-09 02:59:30

+0

@eswa:提示信息?你把那條線放在哪裏? – 2010-06-09 08:23:11

+0

打開大括號後,我添加了警報消息。 funtion noEnter(e) { alert(「start process ...」); //在這裏,我使用您的代碼 } – Eswar 2010-06-09 09:26:07

0

只是我修改腳本像添加一個警報消息。

<script type="text/javascript"> 

document.onkeydown=noEnter; 
if (window.opera) 
     document.getElementById("spinnerField").onkeypress = noEnter; 
else 
    document.getElementById("spinnerField").onkeydown = noEnter; 

function noEnter(e) 
{ 
     alert("start..."); 
     var event = e || window.event; 
     if (event.keyCode == 13) 
     { 
     event.preventDefault(); 
     return false; 
     } 
} 
+0

這裏之前打開彈出(alert),頁面刷新。 – Eswar 2010-06-09 09:36:58

+0

我覺得這是JSF組件相關的問題。 如果你知道jsf相關的論壇,那麼請你提到。 幫幫我。 – Eswar 2010-06-09 09:38:30

+0

你不應該在任何情況下附加一個'onkeydown'事件......而且,這種方式會在每次按鍵時彈出警報。如果你將它放在if塊中,它只會在你按下Enter時觸發。 – 2010-06-09 10:37:43

0

它可以通過Richfaces庫更新(至少對於RF 3.x)來修復。你必須修復射頻源並重建它。 它爲我

  1. 下載RichFaces的來源
  2. 提取出來,然後導航到以何種形式提交完成的文件 「UI/inputnumber微調/ src目錄/主/資源/組織/ RichFaces的/的RenderKit /html/script/SpinnerScript.js「
  3. comment this.edit.form.submit();

    if (e.keyCode == 13){ 
        if (this.spinner.required || "" != this.edit.value) 
         this.edit.value = this.getValidValue(this.edit.value); 
        if (this.edit.form) { 
         this.edit.form.submit(); //!!comment it 
        } 
    } 
    

    }

重建RichFaces的

這裏查看詳細信息http://achorniy.wordpress.com/2010/11/06/disable-enter-form-submit-fix-inputnumberspinner/