Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.11.2017, 10:14
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

Оптимизировать код,ограничение ввода в input
Есть 4 input проверка на ввод одинаковая для каждого, но после того как число вводимых символов превысило N надо переключиться на другой input.
Сделал так, но еше таких 4 блока писать многовато(размер файла будет большим), как это все в цикл можно запихать?
var PS_name_old_1="";
function PS_name_1(){
	var PS_name = document.getElementById("id_PS_Name_1");
	var result = PS_name.value.match( /^[\x2A-9a-zA-Z\x20\x27]{0,8}$/ig );
	if(PS_name.value.length>8){
		var el = document.getElementById("id_PS_Name_2");
		el.focus();
		el.selectionStart=0;
	}
	if(result==null){
		PS_name.value=PS_name_old_1;
	}
	PS_name_old_1=PS_name.value;
}
Ответить с цитированием
  #2 (permalink)  
Старый 30.11.2017, 10:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

pokk,
присвоить элементам класс и цикл с помощью forEach
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2017, 10:30
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от pokk
как это все в цикл можно запихать?
Как вариант...

var PS_name_old=[];
function PS_name(N){
	var PS_name = document.getElementById("id_PS_Name_"+N);
	var result = PS_name.value.match( /^[\x2A-9a-zA-Z\x20\x27]{0,8}$/ig );
	if(PS_name.value.length>8){
		var el = document.getElementById("id_PS_Name_"+(N+1));
		el.focus();
		el.selectionStart=0;
	}
	if(result==null){
		PS_name.value=PS_name_old[N];
	}
	PS_name_old[N]=PS_name.value;
}
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2017, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от ksa
document.getElementById("id_PS_Name_"+(N+1));
а если такого элемента нет?
Ответить с цитированием
  #5 (permalink)  
Старый 30.11.2017, 10:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

pokk,
для чего служит модификатор i в выражении?
Ответить с цитированием
  #6 (permalink)  
Старый 30.11.2017, 12:17
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

А как определить теперь какой input вызвал эту функцию? что бы пропустить проверку на условие длины,а то сейчас получается каждый раз пере сбрасывает позицию курсора во втором input в начало.


var PS_name_old=[];
function PS_name(){
	var  Test = document.querySelectorAll('.PS_Name');
	[].forEach.call(Test,function(el, i){
		var result=el.value.match( /^[\x2A-9a-zA-Z\x20\x27]{0,8}$/g );
		if(result==null){
			el.value=PS_name_old[i];
		}
		PS_name_old[i]=el.value;
		if(el.value.length>7){
				var el_next=Test[i+1];
				el_next.focus();
				el_next.selectionStart=0;
		}
	});
}
<div align="center">
<input id="id_PS_Name_1" name="N_PS_Name_1" type="text" OnInput="PS_name()"  maxlength="8" class="PS_Name">
<input id="id_PS_Name_2" name="N_PS_Name_2" type="text" OnInput="PS_name()"  maxlength="8" class="PS_Name">
<input id="id_PS_Name_3" name="N_PS_Name_3" type="text" OnInput="PS_name()"  maxlength="8" class="PS_Name">
<input id="id_PS_Name_4" name="N_PS_Name_4" type="text" OnInput="PS_name()"  maxlength="8" class="PS_Name">
</div>
Ответить с цитированием
  #7 (permalink)  
Старый 30.11.2017, 12:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

pokk,
<!DOCTYPE html>

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

  <script>
window.addEventListener('DOMContentLoaded', function() {
var  Test = document.querySelectorAll('.PS_Name');
[].forEach.call(Test, function(el,i) {
        var PS_name_old="";
        el.addEventListener('input', function() {
        var result=el.value.match( /^[\x2A-9a-zA-Z\x20\x27]{0,8}$/g );
    if(result==null){
      el.value=PS_name_old;
    }
    PS_name_old=el.value;
    var el_next=Test[i+1];
    if(el.value.length>7 && el_next){
        el_next.focus();
        el_next.selectionStart=0;
    }
        });
    });
    });
  </script>
</head>

<body>

<div align="center">
<input id="id_PS_Name_1" name="N_PS_Name_1" type="text"   maxlength="8" class="PS_Name">
<input id="id_PS_Name_2" name="N_PS_Name_2" type="text"   maxlength="8" class="PS_Name">
<input id="id_PS_Name_3" name="N_PS_Name_3" type="text"   maxlength="8" class="PS_Name">
<input id="id_PS_Name_4" name="N_PS_Name_4" type="text"   maxlength="8" class="PS_Name">
</div>


</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 01.12.2017, 08:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от рони
а если такого элемента нет?
Это уже забота автора темы... Т.к. он даже примера тестового не сделал.
Ответить с цитированием
  #9 (permalink)  
Старый 01.12.2017, 08:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от pokk
А как определить теперь какой input вызвал эту функцию?
Можно прочитать свойство ID у текущего элемента... Можно просто поискать "следующий" элемент в разметке...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать поле input доступным для ввода? mikefromru Events/DOM/Window 4 05.03.2017 09:54
подказка ввода в input на лету Vincent Vega jQuery 7 28.02.2016 17:19
Исправить неудобство списка поля ввода input средствами JQ IONEX jQuery 3 26.09.2015 13:59
Поле для тестового ввода с кнопкой input mort_ Общие вопросы Javascript 3 25.03.2015 14:24
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27