Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.01.2019, 16:36
Новичок на форуме
Отправить личное сообщение для Mike23 Посмотреть профиль Найти все сообщения от Mike23
 
Регистрация: 02.01.2019
Сообщений: 2

Как сделать, чтобы количество элементов не становилось меньше нуля?
Всем привет. Я только учусь. Подскажите пожалуйста. Есть две кнопки + и -. Как сделать так, чтобы количество элементов не становилось меньше нуля и так же сделать и в большую сторону до 5?

var elem = document.querySelector('.elem');
var buttonPlus = document.querySelector('.button_plus');
var buttonMinus = document.querySelector('.button_minus');

buttonPlus.addEventListener('click', addElem);
buttonMinus.addEventListener('click', removeElem);

function addElem() {
  elem.innerHTML = parseInt(elem.innerHTML) + 1;
  if (elem.innerHTML == 5) {
    
  }
}

function removeElem() {
  elem.innerHTML = parseInt(elem.innerHTML) - 1;
  if (elem.innerHTML == 0) {
    elem.innerHTML = 0;
  }
}

Последний раз редактировалось Mike23, 02.01.2019 в 17:33. Причина: Плохо читается
Ответить с цитированием
  #2 (permalink)  
Старый 02.01.2019, 17:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Mike23,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 02.01.2019, 17:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Mike23,
var elem = document.querySelector('.elem');
 var buttonPlus = document.querySelector('.button_plus');
 var buttonMinus = document.querySelector('.button_minus');
 var num = 0, max = 5, min = 0;
 //var num = +elem.innerHTML;

 buttonPlus.addEventListener('click', addElem);
 buttonMinus.addEventListener('click', removeElem);

 function addElem() {
 num = Math.min(++num, max)
 elem.innerHTML = num;
 }

 function removeElem() {
 num = Math.max(--num, min)
 elem.innerHTML = num;
}
Ответить с цитированием
  #4 (permalink)  
Старый 02.01.2019, 17:31
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<input type="number" min="0" max="5" value="0">
Без js
Ответить с цитированием
  #5 (permalink)  
Старый 02.01.2019, 17:45
Новичок на форуме
Отправить личное сообщение для Mike23 Посмотреть профиль Найти все сообщения от Mike23
 
Регистрация: 02.01.2019
Сообщений: 2

Сообщение от рони Посмотреть сообщение
Mike23,
var elem = document.querySelector('.elem');
 var buttonPlus = document.querySelector('.button_plus');
 var buttonMinus = document.querySelector('.button_minus');
 var num = 0, max = 5, min = 0;
 //var num = +elem.innerHTML;

 buttonPlus.addEventListener('click', addElem);
 buttonMinus.addEventListener('click', removeElem);

 function addElem() {
 num = Math.min(++num, max)
 elem.innerHTML = num;
 }

 function removeElem() {
 num = Math.max(--num, min)
 elem.innerHTML = num;
}
Спасибо большое!
Ответить с цитированием
  #6 (permalink)  
Старый 02.01.2019, 18:55
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Вариант
<style>
.podbor {
  position: relative;
}
.podbor>input {
  padding: 2px 2px 1px 4px;
  font-size: 30px;
  width: 70px;
  height: 40px;
  float: left;
  border: 1px solid #666;
  border-radius: 4px 0 0 4px;
}
.podbor>span {
  display: block;
  font-size: 18px;
  position: absolute;
  left: 58px;
  margin: 0;
  padding: 2px;
  line-height: 14px;
  width: 14px;
  border: 1px solid #666;
  background-color: #E4E4E4;
  text-align: center;
  cursor: pointer;
}
.podbor>.plus {
  border-bottom: none;
  height: 16px;
}
.podbor>.minus {
  top: 20px;
  height: 14px;
}
.podbor>span:hover {
  background-color: #999;
}
.clear {
  clear: both;
}
</style>
<div class="clear"></div>
<div class="podbor" data-min="0" data-max="5">
  <input type="text" value="1"/>
  <span class="plus">+</span>
  <span class="minus">-</span>
</div>
<div class="clear"></div>
<hr>
<div class="clear"></div>
<div class="podbor" data-min="3" data-max="8">
  <input type="text" value="3" />
  <span class="plus">+</span>
  <span class="minus">-</span>
</div>
<script>
(_ => {
  [...document.querySelectorAll('.podbor')].forEach(el => el.onclick = ({target, currentTarget}) => {
    if (target.tagName !== "SPAN") return;
    let inp = currentTarget.childNodes[1], val = +inp.value || +currentTarget.dataset.min || 0;
    inp.value = val + {minus: val > +currentTarget.dataset.min ? -1 : 0, plus: val < +currentTarget.dataset.max ? 1: 0}[target.className];
  });
})();
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 02.01.2019, 20:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Poznakomlus,

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<style>
.podbor {
  position: relative;
}
.podbor>input {
  padding: 2px 2px 1px 4px;
  font-size: 30px;
  width: 70px;
  height: 40px;
  float: left;
  border: 1px solid #666;
  border-radius: 4px 0 0 4px;
}
.podbor>span {
  display: block;
  font-size: 18px;
  position: absolute;
  left: 58px;
  margin: 0;
  padding: 2px;
  line-height: 14px;
  width: 14px;
  border: 1px solid #666;
  background-color: #E4E4E4;
  text-align: center;
  cursor: pointer;
}
.podbor>.plus {
  border-bottom: none;
  height: 18px;
}
.podbor>.minus {
  top: 23px;
  height: 16px;
}
.podbor>span:hover {
  background-color: #999;
}
.clear {
  clear: both;
}
</style>
<div class="clear"></div>
<div class="podbor" data-min="0" data-max="5">
  <input type="text" value="1"/>
  <span class="plus">+</span>
  <span class="minus">-</span>
</div>
<div class="clear"></div>
<hr>
<div class="clear"></div>
<div class="podbor" data-min="3" data-max="8">
  <input type="text" value="3" />
  <span class="plus">+</span>
  <span class="minus">-</span>
</div>
<script>
(_ => {
  [...document.querySelectorAll('.podbor')].forEach(el => {
   let inp = el.querySelector('input'), {min,max} = el.dataset;
   el.onclick = ({target}) => {
    if (target.tagName !== "SPAN") return;
    target.closest(".minus") ? --inp.value : ++inp.value;
    inp.value = Math.max(min, Math.min(+inp.value, max));
  }});
})();
</script>

</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 02.01.2019, 22:11
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

рони,
Ответить с цитированием
  #9 (permalink)  
Старый 03.01.2019, 06:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А ручной ввод почему не проверяется, можно же и меньше нуля, и буквы ввести.
Ответить с цитированием
  #10 (permalink)  
Старый 03.01.2019, 16:02
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
А ручной ввод почему не проверяется, можно же и меньше нуля, и буквы ввести.
Он всё-равно не проходит проверку.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<style>
	
		input[type="number"] {
			font-size: 400%;
			border: 1px solid #aaa;
			border-radius: .1em;
			background: hsl(var(--hue), 100%, 95%);
			border-color: hsl(var(--hue), 100%, 50%);
		}
		
		input[type="number"]:valid {
			--hue: 120;
		}
		
		input[type="number"]:invalid {
			--hue: 0;
		}
		
		input[type="number"]::-webkit-inner-spin-button {
			margin-right: .1em;
			opacity: 1;
			-webkit-appearance: none;
			background:
				url('data:image/svg+xml,\
				<svg xmlns="http://www.w3.org/2000/svg" width="100" height="200">\
					<style>\
						text { font: 100px monospace; pointer-events: none; }\
						rect { width: 98px; height: 98px; fill: %23eee; fill-opacity: .75;\
						stroke-opacity: .75; stroke: black; stroke-width: 2px; x:1.5px; }\
						rect:hover { fill: %23bbb; }\
					<%2fstyle>\
					<rect y="1.5"/><rect y="100"/>\
					<text x="20" y="75">+</text>\
					<text x="20" y="175">-</text>\
				</svg>')
				no-repeat
				center / contain
			;
			width: .5em;
		}
		
	</style>
</head>
<body>
	<input type="number" min="0" max="5" step="1" value="0">
	<input type="number" min="0" max="5" step="1" value="0">
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы при вводе числа в поле добавлялись разделители групп разрядов? Hurray Элементы интерфейса 13 18.02.2015 14:07
Как сделать чтобы код не исполнялся когда ненадо и вставить его туда? Nerow Общие вопросы Javascript 16 09.01.2015 23:17
Как сделать при покупке товара менялось их количество на сайте noXeZ Элементы интерфейса 3 23.12.2014 02:40
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как сделать, чтобы span или div исчезали и появлялись плавно? Бобр Общие вопросы Javascript 30 15.02.2011 19:44