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

标签 javascript html css

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

我不太熟悉使用 keypress、keydown、keyup、keycode,但无论什么都可以在纯 JavaScript 中实现。如果可能的话,我需要向后兼容 IE6 的东西,如果不是 IE8 也可以。

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

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

这是我到目前为止所做的事情:

  1. 捕获输入,仅允许数字和点 - 确定
  2. 如果 > 255 或按下时不会出现空点,则捕获 IP 的第一个 block 工作-好的
  3. 仅允许陷印 3 个点 - 好的

我被困在按下时不应该允许 2 个连续点的部分上,这就是为什么我无法继续捕获 IP 地址的第二、第三和第四 block 。

我的代码

脚本:

<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>

最佳答案

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

function handleKeyPress0(e) {
  let regex = /^(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]?[0-9][0-9]?)(\.((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))?)?)?)?)?)?$/;
  return regex.test(e.target.value + String.fromCharCode(e.keyCode));
}
<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"/>

关于javascript - 如果该字符与第一个输出的字符相同,如何防止显示第二个按键的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61660193/

相关文章:

javascript - 当网页上存在类似的多个表格时,向表格添加一个表格行会出现问题吗?

javascript - 向下滚动时隐藏 div

javascript - Backbone js 根据多个 URL 返回的结果构建集合

javascript - 如何在wordpress小部件中将表格宽度设置为父div宽度

html - CSS中的居中框

javascript - 一个 JavaScript 对象可以有一个原型(prototype)链,同时也是一个函数吗?

javascript - 使用ajax将值从javascript传递到python

javascript - 删除最近上传的图像

javascript - 在 ruby​​ on rails 中显示 flash 错误消息后,通过 javascript 保持更改的样式

css - 是否有 CSS 父级选择器?