Javascript只允许对JSF输入文本使用负数或正数

时间:2019-01-07 08:18:35

标签: javascript jsf

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

由于我使用的是自定义的primefaces jar,因此无法使用p:inputNumber(通过映射bigdecimal)。我添加了OnKeyPress个事件以允许数字和DOT符号。但是我不能限制用户在字符串中输入负号。有什么方法可以在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>

1 个答案:

答案 0 :(得分:1)

使用您的方法

只需为输入的第一个字符添加一个例外。您可以通过执行以下操作来做到这一点;

SELECT
    DATEPART( wk, dbo.Transactions.PaymentMadeOn ) AS [Week],
    COUNT (DATEPART( wk, dbo.Transactions.PaymentMadeOn )) AS [Expenses Count],
    DATEPART( YEAR, dbo.Transactions.PaymentMadeOn ) AS [Year],
    SUM ( dbo.Transactions.PaymentAmount ) AS [Total] 
FROM
    dbo.Transactions 
GROUP BY
    DATEPART( wk, dbo.Transactions.PaymentMadeOn ),
    DATEPART( YEAR, dbo.Transactions.PaymentMadeOn ) 
ORDER BY
    DATEPART( YEAR, dbo.Transactions.PaymentMadeOn )

如您所见,这只是增加了一个额外的检查-如果减号是输入字段中的第一个字符,则允许您输入减号。

如果您选择这种方法,请确保在填充支持bean之前先验证该值。

备用的服务器端方法

另一种方法是在服务器端进行操作。您可以通过valueChangeListener将值推送到支持Bean。然后,您可以通过执行类似的操作来简化该过程并恢复到服务器端验证,

<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验证或JSF验证结合起来,具体取决于您的环境支持的情况。