如何在从rich:inputNumberSpinner字段输入按钮时停止页面刷新?

时间:2010-06-09 01:25:35

标签: javascript forms jsf refresh

我使用 rich:inputNumberSpinner 标记。

问题是:

我将光标焦点设置在 rich: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。但是页面更新了。

<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()中使用了一条警告信息 但我点击了输入按钮,第一页刷新,然后显示警告信息。

帮我解决这个问题。 提前致谢。

3 个答案:

答案 0 :(得分:1)

我不是JSF专家,但我认为问题只与客户端JavaScript有关。

在多个浏览器中cannot prevent default actions使用onkeypress(在某些浏览器中,您可以在某些浏览器中使用这是阻止默认操作的唯一方法)。无论如何,这是一个非常混乱的浏览器之间的很多差异。

以下代码会将适当的事件处理程序添加到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属性以完全阻止在 Enter 上提交,但我不确定。如果上述示例在Microsoft产品中无法正常运行,请将noEnter替换为:

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

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

答案 1 :(得分: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;
      }
}

答案 2 :(得分:0)

可以通过Richfaces库更新(至少对于RF 3.x)来修复它。您必须修复RF中的源并重建它。 它对我有用

  1. 下载RichFaces来源
  2. 提取它们并导航到完成表单提交的文件 “UI / inputnumber微调/ SRC /主/资源/组织/ RichFaces的/的RenderKit / HTML /脚本/ SpinnerScript.js”
  3. 评论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
        }
    }
    

    }

  4. 重建richfaces

    在此处查看详细信息http://achorniy.wordpress.com/2010/11/06/disable-enter-form-submit-fix-inputnumberspinner/