Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Предотвратить написание символа (https://javascript.ru/forum/misc/61301-predotvratit-napisanie-simvola.html)

AntonMs 12.02.2016 13:02

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

laimas 12.02.2016 13:32

pattern="[,\.\d]"

AciDWarrioR 12.02.2016 13:49

Цитата:

Сообщение от laimas (Сообщение 407425)
pattern="[,\.\d]"

Мне кажется задача была не совсем в этом. Он просит, чтобы символ проверялся при вводе с клавиатуры, а не при отправки формы. Я так думаю там надо написать функцию на
keydown

рони 12.02.2016 14:18

AntonMs,
чёртова дюжина ограничений для ввода
отключаем лишние кнопы

destus 12.02.2016 14:28

Цитата:

Сообщение от AciDWarrioR (Сообщение 407427)
Я так думаю там надо написать функцию на
keydown

Для keyDown event.keyCode будет содержать одно и тоже кодовое значение для (,б) и (ю.) соответственно.

AciDWarrioR 12.02.2016 14:35

destus,
Особо не разбирался в этом, просто увидел тему, то что пришло в голову для решения.
AntonMs,
<!DOCTYPE html>
<html lang="en">
<head>
	<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<input type='text' id='inp'></input>	
</body>
</html>
<script>
$( "#inp" ).keypress(function(event) {
  var simb =String.fromCharCode(event.keyCode);
  if(simb.match(/[\.,0-9]/)){
  	$('#inp').append(simb);
  }
  	  else{
  	  	return false;
  }
});
</script>

if(!simb.match(/[\.,0-9]/)){
  	return false;
  }

laimas 12.02.2016 15:04

Цитата:

Сообщение от AciDWarrioR
Мне кажется задача была не совсем в этом.


Значит replace(/[^,\.\d]/, '') при вводе.

AciDWarrioR 12.02.2016 15:05

laimas,
По-моему уже все что-то захотели сделать, а от автора тишина, нужно ли ему вообще то, что здесь пишется...

Dilettante_Pro 12.02.2016 15:16

Цитата:

Сообщение от laimas (Сообщение 407442)
Значит replace(/[^,\.\d]/, '') при вводе.

<!DOCTYPE HTML>
<html>
<head>
   <script>
       function onlydigit(inp) {
           inp.value = inp.value.replace(/[^,.0-9]/, "");
     }
   </script>
</head>
<body>
<input id="test" type="text" oninput="onlydigit(this);" /> 
</body>
</html>

Все поучаствовали? Кто еще не высказался?

AntonMs 12.02.2016 16:11

Решил. Спасибо всем за советы.
dom.onkeypress = function(event){
	var e = String.fromCharCode(event.keyCode);
	if(isNaN(e) && e !== ',' && e !== '.'){
		return false;
	}
}

Самое странное что этот-же вариант пробовал до создания темы и fromCharCode возвращал какие-то дроби а return false вообще не срабатывало хотя событие ловилось. Вообщем так и не понял что не так было:(

AntonMs 12.02.2016 18:13

Еще вопрос.. Почему я эту функцию не могу использовать в атрибуте onkeypress=""? Ошибки нет но буквы все равно пишутся.
function key(event){
	var e = String.fromCharCode(event.keyCode);
	if(isNaN(e) && e !== ',' && e !== '.'){
		return false;
	}
}
<input type="text" onkeypress="key(event)">

рони 12.02.2016 18:21

Цитата:

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

event.preventDefault()

AntonMs 12.02.2016 18:44

рони, спасибо! я кстати знал о preventDefault но думал.. какая разница?

рони 12.02.2016 19:02

AntonMs,
вариант для return false
<input type="text" onkeypress="return key(event)">
<script>
  function key(event){
	var e = String.fromCharCode(event.keyCode);
	if(isNaN(e) && e !== ',' && e !== '.'){
		return false
	}
}
</script>

подробнее тут
https://learn.javascript.ru/default-browser-action


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