Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   OnInput блокировка ввода символов (https://javascript.ru/forum/misc/71572-oninput-blokirovka-vvoda-simvolov.html)

pokk 29.11.2017 10:50

OnInput блокировка ввода символов
 
Как вернуть текст который был ?
Т.е удалить неправильный символ.
<input id="id_Radio_Text" OnInput="MathInput()" name="N_Radio_Text" type="text" maxlength="64">

function MathInput(){
	var Radio_Text = document.getElementById("id_Radio_Text");
	var result = Radio_Text.value.match( /^[0-9a-fA-F]{1,4}$/ig );
	if(result==null){
		Radio_Text.value="";
		return;
	}else{
		return;
	}
}

Alexandroppolus 29.11.2017 11:10

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

В идеале хорошо бы ещё позицию курсора возвращать - юзер может редактировать где-то в середине строки.

И конечно, сделать регекс таким образом, чтобы пустую строку допускал (в твоем примере - /^[0-9a-fA-F]{0,4}$/ig)

рони 29.11.2017 11:19

Цитата:

Сообщение от pokk
maxlength="64"

Цитата:

Сообщение от pokk
/^[0-9a-fA-F]{1,4}$/ig

:-?

laimas 29.11.2017 11:25

И a-fA-F при модификаторе i

pokk 29.11.2017 11:53

Благодарю, сделал так
var Radio_Text_old;
function MathInput(){
	var Radio_Text = document.getElementById("id_Radio_Text");
	var result = Radio_Text.value.match( /^[0-9a-fA-F]{0,4}$/ig );
	if(result==null){
		Radio_Text.value=Radio_Text_old;
	}
	Radio_Text_old=Radio_Text.value;
}


PS: про maxlength в курсе просто на одной форме все regexp гоняю

рони 29.11.2017 11:58

pokk,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
window.addEventListener("DOMContentLoaded", function() {
    var el = document.getElementById("id_Radio_Text");
    function  check() {
        var val = this.value;
        val = val.replace(/[^0-9a-f]/gi, "");
        val.length > 4 && (val.length = 4);
        val != this.value && (this.value = val);
    }
    el.addEventListener("input",  check, false)
}, false);
  </script>
</head>

<body>
<input id="id_Radio_Text" name="N_Radio_Text" type="text" maxlength="4">


</body>
</html>

pokk 29.11.2017 13:05

Извиняюсь, но в чем преимущество ?

рони 29.11.2017 13:11

Цитата:

Сообщение от pokk
Извиняюсь, но в чем преимущество ?

...
это вариант решения, хотите используйте, хотите нет.


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