简体   繁体   English

javascript如何防止输入字段中出现多个点

[英]javascript how to prevent from mulitiple dots in input field

I'm trying to develop functionality for input generated by jsf. 我正在尝试为jsf生成的input开发功能。 I already have javascript code that uses the onkeypressed to prevent putting non-numeric values by user: 我已经有使用onkeypressed防止用户输入非数字值的javascript代码:

function validateNumberKey(event){
    return  (45<event.charCode && event.charCode<58 && event.shiftKey==false && DotTracker().prototype.wasPressed())
    || (event.keyCode==8) || (event.keyCode==9) 
}

the code that findsout if user pressed dot is here: 查找用户是否按了点的代码在这里:

function DotTracker() {
    var dotPressed = false;
    this.wasPressed = function() {
        var currentDot = dotPressed;
        dotPressed = true;
        return currentDot; 
    };

}

And simplified input reference: 并简化了input参考:

<input type="text" id="inpurCP" onfocus="new DotTracker()" onkeypressed="validateNumberKey(event)"/>

I'm pretty sure that something goes wrong with calling wasPressed() method. 我很确定调用wasPressed()方法出问题了。 But I'm not quite familiar with javascript though... 但是我对javascript不太熟悉...

Ok I solve the problem. 好的,我解决了问题。 Instead of using DotTracker() . 而不是使用DotTracker() I created another function: 我创建了另一个函数:

function wasDotPressed(event) {
    var index = -1;
    if(event.charCode == 46) {
        var currentValue = event.currentTarget.value;
        index = currentValue.indexOf('.');
    }   
    return index == -1;
}

and add the relevant line of code to the validateNumberKey(event) : 并将相关代码行添加到validateNumberKey(event)

function validateNumberKey(event){
    return  (45<event.charCode && event.charCode<58 && event.shiftKey==false && wasDotPressed(event))
    || (event.keyCode==8) || (event.keyCode==9) 
}

And finally it works :). 最后,它可以工作:)。 Hope that it help anyone that is struggling such problem. 希望它对任何正在解决此类问题的人有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM