Как предотвратить ввод недопустимых символов в поля ввода
Onkeydown
, я запускаю следующий JavaScript:
function ThisOnKeyDown(el) {
if (el.title == 'textonly') {
!(/^[A-Za-zÑñ-s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ-s]/ig, '') : null;
}
if (el.title == 'numbersonly') {
!(/^[0-9]*$/i).test(el.value) ? el.value = el.value.replace(/[^0-9]/ig, '') : null;
}
if (el.title == 'textandnumbers') {
!(/^[A-Za-zÑñ0-9-s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ0-9-s]/ig, '') : null;
}
}
один из этих трех атрибутов заголовка присваивается различным полям ввода на странице. Код работает до тех пор, пока недопустимые символы правильно удаляются, но не до следующего символа. Я хочу найти способ просто запретить недопустимый ввод в первую очередь. Я ценю вашу помощь!
редактировать: я создаю события в мире. Вот как я это делаю. что:
function Globalization() {
var inputs = document.getElementsByTagName('input');
for (i = 0; i < inputs.length; i++) {
inputs[i].onfocus = createEventHandler(
ThisOnFocus, inputs[i]);
inputs[i].onblur = createEventHandler(
ThisOnBlur, inputs[i]);
inputs[i].onkeydown = createEventHandler(
ThisOnKeyDown, inputs[i]);
inputs[i].onkeyup = createEventHandler(
ThisOnKeyUp, inputs[i]);
}
}
Globalization()
выполняется body.onload
таким образом, типичное поле ввода имеет HTML без вызовов функций, как это:
<input id="AppFirstName" style="width: 150px;" type="text" maxlength="30" title="textonly"/>
6 ответов
чтобы предотвратить его установку в первую очередь, вы можете вернуть false в обработчике событий keydown, тем самым предотвращая дальнейшее распространение события.
Я написал пример ниже, используя jQuery, но вы можете использовать ту же функцию при традиционной привязке.
хотя важно проверять и на стороне сервера, проверка на стороне клиента важна для удобства пользователя.
$("input.number-only").bind({
keydown: function(e) {
if (e.shiftKey === true ) {
if (e.which == 9) {
return true;
}
return false;
}
if (e.which > 57) {
return false;
}
if (e.which==32) {
return false;
}
return true;
}
});
код полезен для предотвращения ввода пользователем любого другого символа, кроме номера.
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function keyispressed(e){
var charval= String.fromCharCode(e.keyCode);
if(isNaN(charval)){
return false;
}
return true;
}
</script>
</head>
<body>
<input type="text" onkeydown="return keyispressed(event);"/>
</body>
</html>
вышеуказанный код делает это говорит-позволяет только числа. Вы можете изменить его, добавив исключение, чтобы сказать BACKSPACE, например, как это
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function keyispressed(e){
var charval= String.fromCharCode(e.keyCode);
if((isNaN(charValue)) && (e.which != 8 )){ // BSP KB code is 8
e.preventDefault();
}
return true;
}
</script>
</head>
<body>
<input type="text" onkeydown="return keyispressed(event);"/>
</body>
</html>
Я нашел это решение в:http://help.dottoro.com/ljlkwans.php
работает, как задумано.
<script type="text/javascript">
function FilterInput (event) {
var keyCode = ('which' in event) ? event.which : event.keyCode;
isNumeric = (keyCode >= 48 /* KeyboardEvent.DOM_VK_0 */ && keyCode <= 57 /* KeyboardEvent.DOM_VK_9 */) ||
(keyCode >= 96 /* KeyboardEvent.DOM_VK_NUMPAD0 */ && keyCode <= 105 /* KeyboardEvent.DOM_VK_NUMPAD9 */);
modifiers = (event.altKey || event.ctrlKey || event.shiftKey);
return !isNumeric || modifiers;
}
</script>
< body>
The following text field does not accept numeric input:
<input type="text" onkeydown="return FilterInput (event)" />< /body>
это позволяет текст и !"#$%& но вы можете настроить его, добавив их в проверку, чтобы разрешить только номера, удалив ! в ответ
запустите код против события onkeyup, а не события onkeydown. Таким образом, вы можете получить доступ к результату самого последнего нажатия клавиши, когда событие onkeyup выполняется как клавиша, не зная его результата.
$('.key-filter').keypress(function () {
if (event.key.replace(/[^\w\-.]/g,'')=='') event.preventDefault();
});
затем добавьте класс key-filter к вашему входу при использовании jquery или
<input type="text" onkeypress="if (event.key.replace(/[^\w\-.]/g,'')=='') event.preventDefault();" />
просто поместите символы, которые вы хотите разрешить внутри [] после ^. это позволяет использовать все буквы numbers _ - and .