只允许一个“。”在KeyPress期间的Javascript中

时间:2013-01-29 01:49:15

标签: javascript keypress

如何只允许一个“。” Keypress 期间 javascript

我的代码在这里:

function allowOneDot(txt) {

        if ((txt.value.split(".").length) > 1) {

          //here, It will return false; if the user type another "."

         } 
}

3 个答案:

答案 0 :(得分:6)

我会在答案前重申我在评论中所说的内容:

  

如果用户粘贴了一堆句子怎么办?如果他们在控制台中编辑javascript以完全忽略此检查怎么办?确保您正确处理验证,而不是进行太多简化。

现在我们冒着风险,以下是您不允许用户在文本框中输入多个.(句点)的方式:

document.getElementById('yourTextboxIDHere').onkeypress = function (e) {
    // 46 is the keypress keyCode for period     
    // http://www.asquare.net/javascript/tests/KeyCode.html
    if (e.keyCode === 46 && this.value.split('.').length === 2) {
        return false;
    }
}

Working demo

答案 1 :(得分:1)

如果你真的想要允许一个点,即使用户在其中粘贴文本,你应该使用keyup,而不是keypress,并且你可以保留你的最后一个文本值,以防你需要恢复它。 但缺点是输入值已经被更改,您将在键入时看到它已得到纠正。

(function() {
    var txt = document.getElementById('txt');
    var prevValue = txt.value;

    function allowOneDot(e) {
        var dots = 0;
        var length = txt.value.length;
        var text = txt.value;
        for(var i=0; i<length; i++) {
            if(text[i]=='.') dots++;
            if(dots>1) {
                txt.value = prevValue;
                return false;
            }
        }
        prevValue = text;
        return true;
    }
    txt.onkeyup = allowOneDot;
})();

答案 2 :(得分:-1)

<input type="text" id="test" onkeyup="floatOnly(this);"/>



<script>
function floatOnly(i){
{
  if ((i.value).length > 0){else{i.value = i.value.replace(".." , ".");i.value = i.value.replace("..." , ".");i.value = i.value.replace(/[^0-9\.]/g , "");}}else{i.value = i.value="0";}}<script>