Javascript 如果第二个按键的字符与第一个输出的字符相同,如何防止显示该字符的输出?

Javascript 如果第二个按键的字符与第一个输出的字符相同,如何防止显示该字符的输出?,javascript,html,css,Javascript,Html,Css,假设我按了“.”(键盘上的键代码46)第一次按将显示字符,第二次按将不显示任何内容,除非您按另一个不同的字符,然后在下一次按时再次显示 我对使用keypress、keydown、keyup和keycode并不太熟悉,但任何可以在纯javascript中实现的东西。我需要的东西是向后兼容到IE6如果可能的话,如果不是IE8将是罚款 简而言之:我需要验证ip地址(ipv4)输入,只有当char对ip地址特征有效时,按键才会起作用,如果可能的话,我不想使用弹出消息 我读过一些关于“模式”并将其与输入匹

假设我按了“.”(键盘上的键代码46)第一次按将显示字符,第二次按将不显示任何内容,除非您按另一个不同的字符,然后在下一次按时再次显示

我对使用keypress、keydown、keyup和keycode并不太熟悉,但任何可以在纯javascript中实现的东西。我需要的东西是向后兼容到IE6如果可能的话,如果不是IE8将是罚款

简而言之:我需要验证ip地址(ipv4)输入,只有当char对ip地址特征有效时,按键才会起作用,如果可能的话,我不想使用弹出消息

我读过一些关于“模式”并将其与输入匹配的内容,但除了我不熟悉它之外,我也不确定它是否向后兼容

以下是我迄今为止所做的工作:

  • 捕获输入,仅允许数字和点-正常
  • 若大于255,则捕获ip的第一个块;若按不到,则捕获空点 工作-好的
  • 仅允许捕获3个点-正常
  • 我在按下时不应该允许两个连续的点这一部分上有点结巴,这就是为什么我不能继续在ip地址的第二、第三和第四个块上进行补漏白

    我的代码

    脚本:

    
    函数allowNumbersAndDot(e){
    var n;
    变量点=';
    var ip=document.getElementById('ipaddr')。值;
    if(parseInt(ip)<256&&ip.split(“.”)长度<4){
    如果(ip==点){
    document.all?n=e.keyCode:n=e.which;
    返回(n>47&&n<58);
    }
    否则{
    document.all?n=e.keyCode:n=e.which;
    返回((n>47&&n<58)| | n==46);
    }
    }
    否则{
    document.all?n=e.keyCode:n=e.which;
    返回(n>47&&n<58);
    }
    }   
    功能手柄按键0(e){
    if(allowNumbersAndDot(e)){
    返回true;
    }否则{
    返回false;
    }
    }               
    
    正文:


    您可以创建一个存储第一次按键的变量和另一个存储第二次按键的变量,如果它们相等/相同,则不显示输出,为了长期发挥作用,每当它们相等/相同时,第二个变量为空,当它们不相等/相同时,将第二个变量的值传递给第一个变量,将第二个变量留空,以备将来按键时使用,依此类推。。
    这个答案是一般性的,我给了你一个想法,在这种情况下和将来任何类似的情况下都会对你有好处

    你可以创建一个存储第一次按键的变量和另一个存储第二次按键的变量,如果它们相等/相同,则不会显示输出,并且为了长期工作,当它们相等/相同时,第二个变量为空;当它们不相等/相同时,将第二个变量的值传递给第一个变量,使第二个变量为空,以备将来按键时使用,依此类推。。
    这个答案是一般性的,我给了你一个在这种情况下和将来任何类似情况下都会对你有好处的想法

    我会制作一个正则表达式,对任何有效的部分IP地址返回true,然后在每次按键时检查新值是否仍然有效

    功能手柄按键0(e){
    让正则表达式=/^(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)(\)((25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9])(\((25[0-5]| 2[0-4][0-9]|[01]?)(\)((25[0-5]1240-4][0-9][0-9])/)(\)/)((25[0-5]);
    返回regex.test(e.target.value+String.fromCharCode(e.keyCode));
    }

    我会创建一个正则表达式,对于任何有效的部分IP地址返回true,然后在每次按键时检查新值是否仍然有效

    功能手柄按键0(e){
    让正则表达式=/^(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)(\)((25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9])(\((25[0-5]| 2[0-4][0-9]|[01]?)(\)((25[0-5]1240-4][0-9][0-9])/)(\)/)((25[0-5]);
    返回regex.test(e.target.value+String.fromCharCode(e.keyCode));
    }
    
    
    按键
    已弃用。您可能想改用
    keydown
    。不过,我不知道与IE的兼容性。这主要依赖于较旧的IE版本。是否有一个支持不推荐的代码的时间表?浏览器可能会在几年后继续支持
    keypress
    ,但没有放弃支持的日期。但只要客户端使用相同版本的浏览器,它就会继续正常工作?
    keypress
    不推荐使用。您可能想改用
    keydown
    。不过,我不知道与IE的兼容性。这主要依赖于较旧的IE版本。对不推荐使用的代码是否有一个支持时间表?从现在起,浏览器可能会在几年内继续支持
    keypress
    ,但没有放弃支持的日期。但只要客户端使用相同版本的浏览器,它就会继续正常工作?这确实很好。几乎完美。让我看看我能用这个做什么。谢谢,先生。我找到了一个链接:指向255最大范围,但我似乎无法使它工作。我只是把整件事都贴上了。我不确定我是否需要对它的语法做一些修改,我需要你的意见。更新后,我偷了一部分正则表达式来做数字验证。正则表达式变成了一个怪物,可能有一个
    <script type="text/javascript">
        function allowNumbersAndDot(e){
            var n;
            var dot = '.';
            var ip = document.getElementById('ipaddr').value;
            if (parseInt(ip) < 256 && ip.split(".").length < 4) {
    
                if (ip == dot) {
                    document.all ? n = e.keyCode : n = e.which;
                    return (n > 47 && n < 58);                      
                }
                else {
                    document.all ? n = e.keyCode : n = e.which;
                    return ((n > 47 && n < 58) || n == 46);                         
                }
            }
            else {
                document.all ? n = e.keyCode : n = e.which;
                return (n > 47 && n < 58);
            }
    
        }   
    
        function handleKeyPress0(e) {
            if (allowNumbersAndDot(e) ) {
                return true;
            } else {
                return false;
            }
        }               
    </script>
    
    <body>
        <input id="ipaddr" type="text" title="enter ip address" name="ipaddr" onfocus="this.value=''" maxlength="15" onkeypress="return handleKeyPress0(event);" />                                                 
        <input id="pingbtn" type="submit" value="PING"/>                                                                                                                
    </body>