【问题标题】:Javascript Allow only Negative or postive numbers for JSF input textJavascript 仅允许 JSF 输入文本使用负数或正数
【发布时间】:2019-01-07 08:18:35
【问题描述】:

我有一个输入文本,应该限制用户输入负号,只能在字符串的开头输入。

由于我使用的是自定义 primefaces jar,我无法使用 p:inputNumber(通过映射 bigdecimal)。 OnKeyPress 事件我已添加以允许数字和点符号。但是我不能限制用户在字符串中输入负号。有什么办法可以在onkeypress 事件中实现它。我在下面给出了我的代码

<h:inputText value="#{dimStackLine.max}"
onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) &amp;&amp; event.which != 46 ) return false;">
  <p:ajax event="change" process="@this"></p:ajax>    
  <f:convertNumber pattern="####0.00000" />
</h:inputText>

【问题讨论】:

  • 您可以测试更改的值:/^[\-\+]?\d+$/.test(this.value)
  • 我试过这样 onkeypress="return /^[\-\+]?\d+$/.test(this.value)" 它不允许输入任何值
  • 我知道 - 因此可以使用 onchangeoninput 代替
  • 纯 javascript 验证器 验证器本身就是不安全的,因为它们只在客户端工作。也许对 PrimeFaces 库进行现代化改造会更好

标签: javascript jsf


【解决方案1】:

使用你的方法

只需为输入的第一个字符添加一个例外。你可以这样做;

<h:inputText value="#{downloadBackingBean.value}" onkeypress="if(($(this).val().length == 0 &amp;&amp; even.which == 45) || ((event.which &lt; 48 || event.which &gt; 57) &amp;&amp; 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 验证结合起来,具体取决于您的环境支持什么。

【讨论】:

  • 使用 p:ajax,您可以添加一个“延迟”,这样 ajax 事件就不会频繁触发(例如使用 keyup)。
  • 伟大的贡献顺便说一句...恭维
  • 谢谢。赞赏。
  • @VivekShankar 谢谢。乐于助人
猜你喜欢
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多