javascript - Javascript 仅允许 JSF 输入文本使用负数或正数
问题描述
我有一个输入文本,应该限制用户输入负号,只能在字符串的开头输入。
由于我使用的是自定义 primefaces jar,因此无法使用p:inputNumber
(通过映射 bigdecimal)。OnKeyPress
我添加的事件允许数字和点符号。但我不能限制用户在字符串中输入负号。有什么办法可以在onkeypress
事件中实现它。我在下面给出了我的代码
<h:inputText value="#{dimStackLine.max}"
onkeypress="if( (event.which < 48 || event.which > 57) && event.which != 46 ) return false;">
<p:ajax event="change" process="@this"></p:ajax>
<f:convertNumber pattern="####0.00000" />
</h:inputText>
解决方案
使用你的方法
只需为输入的第一个字符添加一个例外。您可以通过执行以下操作来做到这一点;
<h:inputText value="#{downloadBackingBean.value}" onkeypress="if(($(this).val().length == 0 && even.which == 45) || ((event.which < 48 || event.which > 57) && event.which != 46 )) return false;">
<p:ajax event="change" process="@this"></p:ajax>
<f:convertNumber pattern="####0.00000" />
</h:inputText>
正如您所看到的,这只是添加了一个额外的检查 - 如果它是输入字段中的第一个字符,则允许您输入减号。
如果您走这条路线,请确保在填充您的支持 bean 之前验证该值。
另一种服务器端方法
另一种方法是做这个服务器端。您可以通过 valueChangeListener 将值推送到支持 bean。然后,您可以通过执行以下操作来 ajaxify 过程并恢复到服务器端验证,
<h:form>
<h:inputText valueChangeListener="#{bean.onNewValue}" value="#{bean.value}">
<f:ajax event="keyup" render="@form" execute="@form"/>
</h:inputText>
</h:form>
在设置支持 bean 值之前调用 valueChangeListener。这使您可以不断检查传入的值并相应地处理它们。就像剥离不需要的字符一样。
您应该能够轻松地将其与 bean 验证或 JSF 验证结合起来,具体取决于您的环境支持什么。
推荐阅读
- loops - Golang - 循环写入 ResponseWriter
- ruby - 通过更改每个用户的用户名,将包含 .json 和 .config 文件的文件夹复制到 puppet
- python-3.x - 如何在 Python 的 1 列上连接两个数据框
- javascript - 强制空白在选择选项中呈现
- ios - AWS Amplify - 如何在注册流程中重新发送确认码
- python - 为什么将图像从目录附加到 np.array 后,数组的形状大于图像形状的总和?
- python - 我有一个元组列表,需要删除每个具有与其他元组重叠的整数值的元组
- android - 可绘制资产不会链接android
- go - 从 golang 脚本中检索带有空格的 Github 机密
- excel - 创建设置 x 轴最小值和最大值的宏,但要在最小最大值单元格更改值时调用宏