Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как запретить ввод текста в input (https://javascript.ru/forum/dom-window/18022-kak-zapretit-vvod-teksta-v-input.html)

snizhok 13.06.2011 20:29

Как запретить ввод текста в input
 
Задача такая: Нужно запретить ввод любых символов кроме цыфр в поле ввода. Подскажите решение :help:

snizhok 13.06.2011 20:34

Нашел ответ:

<script>
function checkCurr(d) {
if(window.event)
{
if(event.keyCode == 37 || event.keyCode == 39) return;
}
d.value = d.value.replace(/\D/g,'');
}
</script>
<input type="text" onkeyup="checkCurr(this)">

может кому пригодится :victory:

BoSO 27.11.2011 05:21

Такое решение вызывает перерисовку поля ввода, что кажется не очень эстетично. Как заблокировать ввод символов???

melky 27.11.2011 11:12

в html5 у полей появился новый атрибут - pattern, значением которого является рега на JS.

введите НЕчисла и нажмите отправить.
<form>
<input pattern="\d+" maxlength="14">
<input type="submit" value="Отправить" name="numbers" title="Просто числа">
</form>

Pavel M. 27.11.2011 12:28

есть много готовых решений на javascript
в поисковике поищите что-то вроде 'mask input jquery'

trikadin 27.11.2011 14:02

melky, как-то мне не нравится такая реализация. Было бы намного прикольнее, если бы оно не позволяло вводить ничего, кроме чисел...

Но вообще - круто, конечно)

Rionty 27.11.2011 18:32

я обычно делаю так, очень простой вариант.
код js
function proverka(input) { 
	input.value = input.value.replace(/[^\d]/g, '');
};

пример использования
<input type="text" name="summa" value="" size="40" onkeyup="return proverka(this);" onchange="return proverka(this);">

Aetae 27.11.2011 19:12

/[^\d]/
маргинально)

trikadin 27.11.2011 19:19

Цитата:

Сообщение от Rionty
я обычно делаю так, очень простой вариант.

Простой !== хороший. Регулярки - не самая быстрая часть js. Лучше так:
<input id="d-only">
<script>
document.getElementById("d-only").onkeypress= function(event){
 event= event || window.event;
 if (event.charCode && (event.charCode < 48 || event.charCode > 57))// проверка на event.charCode - чтобы пользователь мог нажать backspace, enter, стрелочку назад...
  return false;
};
</script>


P. S. Кстати, зачем у вас в атрибуте стоит return, если ф-ция proverka (кстати, пишите всё-таки check) ничего не возвращает?

Rionty 27.11.2011 20:17

мне мой вариант устраивает.но спорить не буду, возможно ваш вариант работает быстрее и лучше. Возьму на заметку.
про return согласен, это рудимент от каких-то испытаний остался=)
про check промолчу, дело каждого. будь моя воля я бы вообще всё на чистом русском писал. непонимаю, на самом деле таких гонений родного языка.
хотя зависит от проекта. для себя пишу proverka, для крупных написал бы CheckDigit или что-то в этом духе.

trikadin 27.11.2011 20:25

Цитата:

Сообщение от Rionty
мне мой вариант устраивает.

Не буду навязывать свой) Просто написал...

Цитата:

Сообщение от Rionty
непонимаю, на самом деле таких гонений родного языка.
хотя зависит от проекта. для себя пишу proverka, для крупных написал бы CheckDigit или что-то в этом духе.

Я патриотично отношусь к русскому языку) Просто транслит неудобен для чтения, имхо.

BoSO 27.11.2011 21:29

Никто так и не смог добится запрета на ввод! Все решения через замену с некрасивой перерисовку поля ввода((( ЖАЛЬ!

trikadin 27.11.2011 21:32

Цитата:

Сообщение от BoSO
Никто так и не смог добится запрета на ввод! Все решения через замену с некрасивой перерисовку поля ввода((( ЖАЛЬ!

Ты дурной, штоле? Ты мой вариант видел? В нём нет никакой перерисовки.

BoSO 27.11.2011 21:34

Цитата:

Сообщение от trikadin (Сообщение 139295)
Простой !== хороший. Регулярки - не самая быстрая часть js. Лучше так:
<input id="d-only">
<script>
document.getElementById("d-only").onkeypress= function(event){
 event= event || window.event;
 if (event.charCode && (event.charCode < 48 || event.charCode > 57))// проверка на event.charCode - чтобы пользователь мог нажать backspace, enter, стрелочку назад...
  return false;
};
</script>


P. S. Кстати, зачем у вас в атрибуте стоит return, если ф-ция proverka (кстати, пишите всё-таки check) ничего не возвращает?


НЕ ПАШЕТ ЭТОТ ВАРИАНТ В ПРИМЕРЕ

trikadin 27.11.2011 21:36

Цитата:

Сообщение от BoSO
НЕ ПАШЕТ ЭТОТ ВАРИАНТ В ПРИМЕРЕ

Какой браузер?

BoSO 27.11.2011 21:37

OPERA)

в лисе таже фигня
дебаггер дает ошибку
document.getElementById("d-only") is null

Aetae 27.11.2011 22:11

Цитата:

Сообщение от Rionty (Сообщение 139310)
про check промолчу, дело каждого. будь моя воля я бы вообще всё на чистом русском писал. непонимаю, на самом деле таких гонений родного языка.

1. Вам надо в 1с прогеры идти.
2. А коли для себя и очень хочется, то и в js нет проблоем:
Пример: ужасы и извращения
var переменная="такие дела";
сообщение=function(текст){alert(текст)};
сообщение(переменная)

trikadin 27.11.2011 22:50

Цитата:

Сообщение от BoSO
OPERA)

в лисе таже фигня
дебаггер дает ошибку
document.getElementById("d-only") is null

***л я эту оперу... Там нет charCode.

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

А ещё есть ie, в котором нет определения шифта и контрола (в шестом, во всяком случае).

Под них пишем фиксы. Для нормальных - то, что тут.

BoSO 27.11.2011 23:07

Цитата:

Сообщение от trikadin (Сообщение 139355)
***л я эту оперу... Там нет charCode.

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

А ещё есть ie, в котором нет определения шифта и контрола (в шестом, во всяком случае).

Под них пишем фиксы. Для нормальных - то, что тут.

И кому нужен такой script?
Тут пашет, тут не пашет)))))))))

BoSO 27.11.2011 23:09

Вот похожее решение с помощью jQuery

<form id="login_form">
<input type="text" class="asci_only mail" name="login" />
<input type="password" name="password" />
<input type="submit" />
</form>

<script type="text/javascript">

$('input.asci_only').keypress( function(e) {
if($.browser.msie)
return isAsci(e.keyCode)
else
return (e.keyCode) ? true : isAsci(e.charCode)
});
function isAsci(cCode){
return /[a-zA-Z0-9@\.]/.test(String.fromCharCode(cCode))
}
$('input.mail').change( function() {
if(!validateEmail(this.value)){
alert('Введите email')
this.focus()
return false
}
return true
});
$('#login_form').submit( function(){
return $('input.mail').change()
})
})

function validateEmail(email){
return (email.search(/^[^@\s]+@[^@\s]+\.[^@\s]{2,}$/) == 0) ? true : false
}
</script>

melky 27.11.2011 23:59

Цитата:

Сообщение от trikadin (Сообщение 139259)
melky, как-то мне не нравится такая реализация. Было бы намного прикольнее, если бы оно не позволяло вводить ничего, кроме чисел...

Но вообще - круто, конечно)

это же семантика, чтоб её :) html5 и все дела.

trikadin 28.11.2011 00:08

Цитата:

Сообщение от melky
это же семантика, чтоб её

А кстати идея... Сделать скрипт, который бы обеспечивал ввод по регулярке...

melky 28.11.2011 00:13

для IE и старго подобного? он давно есть. не стану искать и показывать, но он точно есть :)

trikadin 28.11.2011 00:15

Ну вот, опять. Только что-то придумаешь - а это уже придумали, оказывается)

melky 28.11.2011 00:16

а потом они говорят, что мы велосипеды придумываем

trikadin 28.11.2011 00:18

Вот-вот)

Идею мне, идею! (:D)

BoSO 28.11.2011 01:39

пошел флуд)))

filan 28.11.2011 09:39

С jQuery можно так:

$('input').keypress(function(event){
    if (event.which < 48 || event.which > 57) return false;
});

trikadin 28.11.2011 11:24

filan, ты молодец, конечно, но стрелочкам твой код работать не даёт.

BoSO, хотим и флудим)

filan 28.11.2011 12:28

?! уточни - каким стрелочкам?

<!DOCTYPE HTML>
<html>
<head>   
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
</head>
<body>
<input  type="text">
<script>

$('input').keypress(function(event){
    if (event.which < 48 || event.which > 57) return false;
});
</script>
</body>
</html>

filan 28.11.2011 12:31

trikadin, извини. В FF действительно не дает. В хроме и и IE8 все OK.

zoOmer 03.06.2014 02:56

А как запретить ввод определенного символа?
Задача: Когда 2 раза кликаешь по полю input бывает он запоминает введенное слово или же когда вводишь в него чтоб удаляло символ ":" если он будет введен??

К примеру я ввожу Иванов: и тут же сразу это регулярное выражение убирает в конце вот этот символ двоеточие : вот как то так.

zoOmer 04.06.2014 09:38

Помогите пожалуйста с этой регуляркой.
Заранее огромное спасибо)

Erolast 04.06.2014 19:37

[^:] //Любой символ, кроме двоеточия

burlesk32 16.02.2016 15:20

Если не js то мб подойдет
< input disabled="true" />

l11_vadis 07.11.2016 01:48

почему если я вешаю обработчик нечего не работает?

<input id="d-only"><input id="b-only">

function fu(event){
 event= event || window.event;
 //alert(event)
 if (event.charCode && (event.charCode < 48 || event.charCode > 57))// проверка на event.charCode - чтобы пользователь мог нажать backspace, enter, стрелочку назад...
  return false;
};
document.getElementById("d-only").onkeypress = fu
document.getElementById("b-only").addEventListener("keypress", fu, false)

рони 07.11.2016 02:31

Цитата:

Сообщение от l11_vadis
return false;

event.preventDefault()

Aetae 07.11.2016 02:39

Коммент врёт. Данный код позволяет вводить символы от 48 до 57 включительно. Т.е. цифры и ничего кроме цифр.)

рони 07.11.2016 02:46

Цитата:

Сообщение от Aetae
Коммент врёт.

у меня не врёт

Aetae 07.11.2016 02:47

рони, я туплю, пойду ка я спать=\.


Часовой пояс GMT +3, время: 05:22.