javascript - p :inputtext format number like '999,999'

标签 javascript jquery jsf primefaces mask

在我的 XHTML 页面中,我有一些 inputText 字段,用户可以在其中插入格式为“999,999”的数值(最多三个整数值,最多三个小数值)。小数点分隔符是“,”,因为我想使用意大利语语言环境格式化上述字段。

实际上这是我的 p:inputText 组件:

<p:inputText value="#{r.value}" id="verog_#{r.id}" 
    onkeypress="return isNumberKey(event)" />

isNumberKey() JavaScript 函数仅启用允许的字符(数字和逗号):

function isNumberKey(evt)
{
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode == 44) return true;
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}

但是我无法控制允许的最大位数,因此用户可以输入“1234,5678”之类的数字,或者更糟糕的是“12,,34”。

我需要在客户端检查这些值,因为它们位于对话框内。实际上,我在单击“保存”按钮后在服务器端进行检查:

<p:commandButton value="save" action="#{myBean.saveAction}" ajax="true"
    update=":growl" oncomplete="dialogVar.hide()">
    <f:param name="action" value="#{action}" />
</p:commandButton>

但是如果我输入错误,该对话框将始终隐藏,并且用户被迫再次提交值。

我无法使用 f:convertNumber,因为数据作为字符串而不是数字保存在数据库上。

我也尝试使用 p:inputMask 组件,但我无法使其正常工作(可能是由于缺乏知识):掩码“999?,999”不符合我的要求。

也许我可以使用转换器来做到这一点(p:inputText 组件具有“converter”和“converterMessage”属性),但我的转换器尝试也失败了:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.ITALIAN);
nf.setMaximumIntegerDigits(3);
nf.setMaximumFractionDigits(3);
String result = nf.format(submittedValue);

它总是给我 IllegalArgumentException,即使 SubmittedValue 是 0。

我怎样才能实现我的目标?提前致谢。

最佳答案

您需要在客户端测试整个值。

我做了一个 JS 验证示例:http://jsfiddle.net/lechlukasz/w8K8j/1/

它调用模糊验证函数:

function valid(val) {
    var reg = new RegExp('^[0-9]{1,3}(,[0-9]{1,3})?$');
    if (!reg.test(val))
        return false;
    return true;
}

如果您想对按键进行全面验证,请不要忘记允许逗号作为最后一个字符(在最终字符串中是非法的,但在键入时是必要的:)

关于javascript - p :inputtext format number like '999,999' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049135/

相关文章:

JavaScript 错误的时间戳格式

javascript - 选中单选按钮时执行特定操作

javascript - CSS 变换旋转在 Internet Explorer 11 中不起作用

javascript - 文件上传ajax :The body of your POST request is not well-formed multipart/form-data

javascript - jQuery 在 "select"操作后在 div 中显示文本?

javascript - 如何使用 <i></i> 标签显示可关闭的弹出框

jsf - primefaces 中延迟加载的分页无法正常工作

java - 我如何在 jsf 页面中嵌入 java 代码?

javascript - 在 EaselJS 中创建刮刮卡

html - 复合组件和 CSS