我使用 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()中使用了一条警告信息 但我点击了输入按钮,第一页刷新,然后显示警告信息。
帮我解决这个问题。 提前致谢。
答案 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中的源并重建它。 它对我有用
评论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/