JSFiddle - React, Tailwind, and code Playground
HTML
<div class="lists-content">
<div class="list-item">
<div class="numeric-selector">
<a class="minus"><i class="material-icons">-</i></a>
<input type="number" class="numeric-input" step="1" min="1" max="9" readonly="" value="1">
<a class="plus"><i class="material-icons">+</i></a>
</div>
</div>
<div class="list-item">
<div class="numeric-selector">
<a class="minus"><i class="material-icons">-</i></a>
<input type="number" class="numeric-input" step="1" min="0" max="9" readonly="" value="0">
<a class="plus"><i class="material-icons">+</i></a>
</div>
</div>
<div class="list-item">
<div class="numeric-selector">
<a class="minus"><i class="material-icons">-</i></a>
<input type="number" class="numeric-input" step="1" min="0" max="9" readonly="" value="0">
<a class="plus"><i class="material-icons">+</i></a>
</div>
</div>
</div>
CSS
.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;
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;
}
.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 #e0e0e0;
border-radius: 0 2px 2px 0;
color: #e0e0e0;
cursor: default;
}
.lists-content > .list-item > .numeric-selector input {
position: relative;
...
JavaScript
$(function NumericOperations() {
var input = $('.list-item .numeric-input');
var minus = input.prev('a.minus');
var plus = input.next('a.plus');
var max = input.attr('max');
var min = input.attr('min');
minus.on('click', function() {
var current_int = parseInt($(this).next(input).val(), 10);
--current_int;
$(this).next(input).val(current_int);
});
plus.on('click', function() {
var current_int = parseInt($(this).prev(input).val(), 10);
++current_int;
$(this).prev(input).val(current_int);
});
});