JSFiddle - React, Tailwind, and code Playground

by James Goodwin

HTML

<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
      rel="stylesheet">
<div class="lists-content">
								<div class="list-item">
									<span class="list-name" data-description="Старше 12 лет">Взрослые</span>
									<div class="numeric-selector">
										<a class="minus"><i class="material-icons">remove</i></a>
										<input id="adult-counter" type="number" class="numeric-input" min="1" max="9" readonly value="1">
										<a class="plus"><i class="material-icons">add</i></a>
									</div>
								</div>
								<div class="list-item">
									<span class="list-name" data-description="От 2 до 12 лет">Подростки</span>
									<div class="numeric-selector">
										<a class="minus"><i class="material-icons">remove</i></a>
										<input id="teen-counter" type="number" class="numeric-input" min="0" max="8" readonly value="0">
										<a class="plus"><i class="material-icons">add</i></a>
									</div>
								</div>
								<div class="list-item">
									<span class="list-name" data-description="До 2 лет">Младенцы</span>
									<div class="numeric-selector">
										<a class="minus"><i class="material-icons">remove</i></a>
										<input id="kid-counter" type="number" class="numeric-input" min="0" max="8" readonly value="0">
										<a class="plus"><i class="material-icons">add</i></a>
									</div>
								</div>
							</div>

CSS

body {
  font-family: 'Open Sans', sans-serif;
  width: 200px
}
.lists-content {
	position: relative;
	overflow: hidden;
	z-index: 12;
	background: #fff;
    padding: 18px;
	border-radius: 4px;
}
.lists-content > .list-item {
	position: relative;
    display: inline-block;
    width: 100%;
    margin: 0 0 12px;
}
.lists-content > .list-item:last-child {
	margin: 0;
}
.lists-content > .list-item > .list-name {
	position: relative;
    font-size: 0.825rem;
    float: left;
    display: inline-block;
	text-align: left;
}
.lists-content > .list-item > .list-name:after {
	position: relative;
	content: attr(data-description);
	font-size: 0.6rem;
	display: block;
	color: #9e9e9e;
}
.lists-content > .list-item > .numeric-selector {
	position: relative;
    display: inline-block;
    float: right;
	font-size: 0;
	padding: 2px 0;
	-webkit-touch-callout: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
}
.lists-content > .list-item > .numeric-selector a {
    position: relative;
    display: inline-block;
    cursor: pointer;
    width: 24px;
    height: 24px;
    color: #e0e0e0;
	-webkit-transition: all .25s;
    transition: all .25s;
}
.lists-content > .list-item > .numeric-selector a i {
	font-size: 22px;
}
.lists-content > .list-item > .numeric-selector a.minus {
	border-radius: 2px 0 0 2px;
	border: 1px solid #e0e0e0;
}
.lists-content > .list-item > .numeric-selector a.minus:hover {
	border: 1px solid #ef9a9a;
	color: #ef9a9a;
}
.lists-content > .list-item > .numeric-selector a.minus.disabled:hover {
	border-radius: 2px 0 0 2px;
	border: 1px solid #e0e0e0;
	color: #e0e0e0;
	cursor: default;
}
.lists-content > .list-item > .numeric-selector a.plus {
	border: 1px solid #e0e0e0;
	border-radius: 0 2px 2px 0;
}
.lists-content > .list-item > .numeric-selector a.plus:hover {
	border: 1px solid #8bc34a;
	color: #8bc34a;
}
.lists-content > .list-item > .numeric-selector a.plus.disabled:hover {
	border: 1px solid...

JavaScript

$(function NumericOperations() {
	var input = $('.numeric-input');
	var minus = input.prev('a.minus');
	var plus = input.next('a.plus');
	
	minus.html(function() {
		var min = $(this).next(input).attr('min');
        if($(this).next(input).val() == min) {
			$(this).addClass('disabled');
		};
	});

	plus.on('click', function() {
		var max = $(this).prev(input).attr('max');
		if ($(this).prev(input).val() == max) {
			$(this).addClass('disabled');
		};
	});

	minus.on('click', function() {
		var min = $(this).next(input).attr('min');
		if ($(this).next(input).val() !== min) {
			var current_int = parseInt($(this).next(input).val(), 10);
			$(this).next(input).val(--current_int);
			$(this).parents('.numeric-selector').find('a').removeClass('disabled');
		} 
		if ($(this).next(input).val() == min) {
			$(this).addClass('disabled');
		}
	});

	plus.on('click', function() {
		var max = $(this).prev(input).attr('max');
		if ($(this).prev(input).val() != max) {
			var current_int = parseInt($(this).prev(input).val(), 10);
			$(this).prev(input).val(++current_int);
			$(this).parents('.numeric-selector').find('a').removeClass('disabled');
		}
		if($(this).prev(input).val() == max) {
		$(this).addClass('disabled');
		}
	});
});

$(function(){
		var teens_max;
		var kids_max;
		
		$(function(){
			teens_max = $('#teen-counter').attr('max');
			kids_max = $('#kids-counter').attr('max');
		});
		
		$('a.plus').on('click', function(){
			$(this).prev('input').change();
		});
		
		$('a.minus').on('click', function(){
			$(this).next('input').change();
		});
		
		$('#adult-counter').on('change', function(){
			var max_value = parseInt($(this).attr('max'));
			$('#teen-counter').attr('max', teens_max - $(this).val());
		});
})