Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.02.2018, 18:18
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

j0hnik,
При чередовании вводов и плюсов в какой-то момент получается
NaN комнат
Не понял пока, с чем связано - отвлекают.
Ответить с цитированием
  #12 (permalink)  
Старый 20.02.2018, 18:25
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Dilettante_Pro,
Видимо пытались текст вводить а не цифры
Ответить с цитированием
  #13 (permalink)  
Старый 20.02.2018, 19:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,138

j0hnik,
val--; за ноль уходит и ap выдаёт -1 undefined
Ответить с цитированием
  #14 (permalink)  
Старый 20.02.2018, 19:14
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

j0hnik,
При плюсе или минусе после редактирования значения без очистки поля - менять только цифры - выдает ошибку.
Немного помогает - при сохранении пробела
el.onchange = e => {
val = el.value.split(" ")[0];
ap(parseInt(el.value),i);
}
А вообще нужен регексп по прочистке значения

Все, пока убежал.
Ответить с цитированием
  #15 (permalink)  
Старый 20.02.2018, 19:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
if (val > 0) добавил проверку
Ответить с цитированием
  #16 (permalink)  
Старый 20.02.2018, 19:25
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Dilettante_Pro,
Исправил.
Ответить с цитированием
  #17 (permalink)  
Старый 20.02.2018, 20:31
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

так, сейчас буду разбираться.
1 вопрос. Допустим у меня на странице 30 инпутов. Одни обычные текстовые для личных данных и адреса. И 15 инпутов в которых нужно применять вот этот скрипт с плюсами, минусами и выводом текста.
Как теперь указать скрипту те инпуты, в которые ему нужно лезть, а в какие не нужно?
2 вопрос. Допустим идет 3 инпута в которых склоняется одно слово, потом 2 инпута в которых склоняется другое слово. Скрипт получается идет сверху вниз по всем инпутам и в них делает подстановки? Т.е. нужно в массиве просто 3 раза подряд прописать одно и тоже?
Ответить с цитированием
  #18 (permalink)  
Старый 20.02.2018, 20:32
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Один ответ на 2 вопроса, присвоить определенные классы и использовать их!

и в массиве 3 раза прописывать не надо. не гуд это.
Ответить с цитированием
  #19 (permalink)  
Старый 20.02.2018, 21:24
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от j0hnik Посмотреть сообщение
Один ответ на 2 вопроса, присвоить определенные классы и использовать их!

и в массиве 3 раза прописывать не надо. не гуд это.
Ну по поводу перебора инпутов как я понял нужно где-то тут
inp = document.querySelectorAll('input');

добавить что только инпуты с определенным классом.

а вот про массив не понял.
допустим отфильтровали инпуты.
но дальше то как я понимаю он подставляет последовательно данные из массива.
т.е. если у меня 5 инпутов, то в массиве должно быть 5 блоков?
Ответить с цитированием
  #20 (permalink)  
Старый 20.02.2018, 21:52
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
		<button>-</button><input type="text"><button>+</button><br>
	<button>-</button><input type="text" class="san"><button>+</button><br>
	<button>-</button><input type="text" class="san"><button>+</button><br>
	<button>-</button><input type="text" class="kom"><button>+</button><br>
	<button>-</button><input type="text"><button>+</button><br>
	<button>-</button><input type="text" class="chas"><button>+</button><br>
	<button>-</button><input type="text"><button>+</button><br>
	<script>

		var sklon = (n, obj) => n+" "+obj[(n%100>4 && n%100<20)?2:[2, 0, 1, 1, 1, 2][(n%10<5)?n%10:5]];

		var obj = {kom:['комната', 'комнаты', 'комнат'],
							san:['санузел', 'санузла', 'санузлов'],
							chas:['час', 'часа', 'часов']},
		inp = document.querySelectorAll('.san, .kom, .chas');
		inp.forEach((el, i)=>{
			el.value = 0;
			var val, cl = el.className;
			el.previousElementSibling.onclick = e => {
				val = parseInt(el.value);
				if (val > 0) val--;
				el.value = sklon(val, obj[cl]);
			};
			el.nextElementSibling.onclick = e => {
				val = parseInt(el.value);
				val++;
				el.value = sklon(val, obj[cl]);
			};
			el.onchange = e => {
				val = parseInt(el.value);
				e.target.value = sklon(val, obj[cl]);
			};
		});

	</script>
</body>
</html>


вместо класса можно использовать любые другие доступные атрибуты.

Последний раз редактировалось j0hnik, 20.02.2018 в 22:01.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 блока "отрыть полностью" polepropilen Элементы интерфейса 7 22.06.2018 23:53
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Исполнять скрипт только для текущего элемента snovapavel jQuery 19 10.03.2015 13:22
проблема со scroll Chrome Элементы интерфейса 2 21.10.2013 14:46
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38