Проверка максимальной длины JavaScript с помощью Overtype / Insert Key - PullRequest
1 голос
/ 09 ноября 2011

Я пытаюсь отредактировать существующий код проверки JavaScript.

Используя событие onkeydown, код проверяет, что значение в текстовом поле не превышает максимальную длину. Я не могу использовать <input maxlength="value" />, поскольку в строке могут быть символы форматирования, которые я могу безопасно исключить из максимальной длины.

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

Этот ответ утверждает, что я не могу определить, включен ли overtype, но не предоставляет никаких ссылок. Таким образом, если предположить, что я не могу обнаружить чрезмерный тип, есть ли в событии onkeydown возможность обнаружить, будет ли заменен символ.

Я доволен решением только для IE.

Обновление : onblur не подходит, так как это позволит им пройти много символов сверх предела, прежде чем предупредить их о максимальной длине. Я хотел бы помешать им преодолеть лимит.

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

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

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

Если вы пытаетесь остановить пользователя, если он достигнет этого предела при вводе текста, я напишу функцию для вычисления фактической длины, которую вы тестируете.Например,

function validateMyInput() {
    var myInputField = document.getElementById('myInput');
    var removeAllExcludedCharsResult = myInputField.value.replace('&','');//exclude &
    var totalLength = removeAllExcludedCharsResult.length;
    if(totalLength < 500) { //limit of this test is 500
        return true;
    }
    else {
return false;
    }

}

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

ОБНОВЛЕНИЕ

Я проверил эту проблему Chrome, и ключ вставки, кажется, игнорируется.IE с другой стороны делает overkey.Тем не менее, это кажется специфичным для страницы, например, если я включил вставку на странице A, это, кажется, не влияет на страницу B. Я нашел эту страницу , которая, кажется, способна захватить событие кода ключа дажекогда вставка была нажата.Это может быть связано со следующим кодом?

if(window.event) {
    event = window.event; //where event is the javascript key event.
}

В любом случае, приведенная выше ссылка, по-видимому, объясняет проблему, надеюсь, она получит ответ, если вышеприведенное неверно.

Надеюсь, я не понял, в чем проблема, и это помогло.

1 голос
/ 09 ноября 2011

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

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

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