Как предотвратить отображение вывода второго нажатия клавиши, если этот символ совпадает с первым выведенным символом? - PullRequest
0 голосов
/ 07 мая 2020

Скажем, я нажал "." (код клавиши 46 на клавиатуре) первое нажатие покажет символ, второе нажатие ничего не покажет, если вы не нажмете другой символ, который отличается от того, что он снова отображается при следующем нажатии.

Я не очень знаком с использованием клавиш, keydown, keyup, keycode, но все, что может сделать это в чистом виде javascript. Мне нужно что-то обратно совместимое до IE6, если возможно, если бы не IE8. характеристика IP-адреса c, я не хочу использовать всплывающие сообщения, если это возможно.

Я читал кое-что о «шаблоне» и сопоставлении его с вводом, но помимо того факта, что я я не знаком с ним также я не уверен, что он обратно совместим.

Вот что я сделал до сих пор:

  1. Захваченные входы, только числа и точка разрешена - ОК
  2. Захваченный первый блок IP-адреса, если> 255, или пустая точка, когда нажатие не работает - ОК
  3. Допускается захват только 3 точек - ОК

Я застрял в том, что при нажатии не должно быть двух точек подряд, поэтому я не могу продолжить захват 2-го, 3-го и 4-го блоков IP-адреса.

МОЙ КОД

Скрипт:

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

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Я бы сделал регулярное выражение, которое возвращает истину для любого действительного частичного IP-адреса, а затем при каждом нажатии клавиши проверяет, что новое значение все еще будет действительным.

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"/>
0 голосов
/ 07 мая 2020

вы можете создать переменную, которая хранит первое нажатие клавиши, и другую переменную, которая хранит второе нажатие клавиши, если они равны / идентичны, вывод не отображается, и чтобы эта работа работала в долгосрочной перспективе, когда они равны / идентичны, вторая переменная пуста, и всякий раз, когда они не равны / идентичны, передают значение второй переменной первой переменной, оставляя вторую пустую для будущих нажатий клавиш и так далее и так далее .. это общий ответ, я дал вам идею, которая может принести вам пользу в этой ситуации и любой подобной ситуации в будущем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...