stepper

by mkdizajn

HTML

<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<select name='weight' id='weightpicker' class='hide-cat-input select-step' >
					<option value=''>Choose Weight</option>
					<option value='5'>5 lbs or less</option><option value='5.0625'>5 lbs, 1 oz.</option><option value='5.125'>5 lbs, 2 oz.</option><option value='5.1875'>5 lbs, 3 oz.</option><option value='5.25'>5 lbs, 4 oz.</option><option value='5.3125'>5 lbs, 5 oz.</option><option value='5.375'>5 lbs, 6 oz.</option><option value='5.4375'>5 lbs, 7 oz.</option><option value='5.5'>5 lbs, 8 oz.</option><option value='5.5625'>5 lbs, 9 oz.</option><option value='5.625'>5 lbs, 10 oz.</option><option value='5.6875'>5 lbs, 11 oz.</option><option value='5.75'>5 lbs, 12 oz.</option><option value='5.8125'>5 lbs, 13 oz.</option><option value='5.875'>5 lbs, 14 oz.</option><option value='5.9375'>5 lbs, 15 oz.</option><option value='6'>6 lbs, 0 oz.</option><option value='6.0625'>6 lbs, 1 oz.</option><option value='6.125'>6 lbs, 2 oz.</option><option value='6.1875'>6 lbs, 3 oz.</option><option value='6.25'>6 lbs, 4 oz.</option><option value='6.3125'>6 lbs, 5 oz.</option><option value='6.375'>6 lbs, 6 oz.</option><option value='6.4375'>6 lbs, 7 oz.</option><option value='6.5'>6 lbs, 8 oz.</option><option value='6.5625'>6 lbs, 9 oz.</option><option value='6.625'>6 lbs, 10 oz.</option><option value='6.6875'>6 lbs, 11 oz.</option><option value='6.75'>6 lbs, 12 oz.</option><option value='6.8125'>6 lbs, 13 oz.</option><option value='6.875'>6 lbs, 14 oz.</option><option value='6.9375'>6 lbs, 15 oz.</option><option value='7'>7 lbs, 0 oz.</option><option value='7.0625'>7 lbs, 1 oz.</option><option value='7.125'>7 lbs, 2 oz.</option><option value='7.1875'>7 lbs, 3 oz.</option><option value='7.25'>7 lbs, 4 oz.</option><option value='7.3125'>7 lbs,...

CSS

/* Do not change */

.select-step {
    width: 0.1px;
    height: 0.1px;
    opacity: 0;
    overflow: hidden;
    position: absolute;
    z-index: -1;
    -webkit-appearance: none;
}

/* You can change from here */

.jquery-select-step {
    display: inline-block;
}
.jquery-select-step-element {
    position: relative;
    display: inline-block;
    padding: 5px 45px;
    font-size: 13px;
    font-weight: bold;
    line-height: 20px;
    color: #333;
    white-space: nowrap;
    vertical-align: middle;
    user-select: none;
    background-color: #fff;
    border: 1px solid #d5d5d5;
    border-radius: 3px;
}
.jquery-select-step-element > div {
    display: inline-block;
}
.decrementStep, .incrementStep {
    position: absolute;
    width: 30px;
    left: 0;
    top: 0;
    padding: 5px;
    text-align: center;
    border-right: 1px solid #d5d5d5;
    background-image: -webkit-linear-gradient(#fcfcfc, #eee);
    background-image: linear-gradient(#fcfcfc, #eee);
    cursor: pointer;
}
.incrementStep {
    left: auto;
    right: 0;
    border-right: 0;
    border-left: 1px solid #d5d5d5;
}

JavaScript

++$(function() {
	$(".select-step").selectStep({
		  onChange: function(value) {
			console.log(value, "value");
		  }
		});
	})

(function ($) {
    $.fn.selectStep = function (vars) {
        /*
         * Function to get all plugin's variables
         * and element options on array
         */
        function getData(element, callback) {
            // Define default variables
            var defaultVars = {
                onChange: null,
                incrementLabel: "+",
                decrementLabel: "-"
            };
            var assign = Object.assign;
            // Get all plugin variables
            vars = assign({}, defaultVars, vars);
            var options = [];
            // Get select options
            var optElement = $(element).find("option");
            optElement.each(function (i, o) {
                var name = $(this).text();
                var value = $(this).attr("value");
                var selected = $(this).is(':selected');
                options = options.concat([{ name: name, value: value, selected: selected }]);
                if (i === optElement.length - 1) {
                    // Fire callback with select options and variables
                    callback(vars, options);
                }
            });
        }
        /*
         * Function to create fake element
         * to mock the select elements
         */
        function addFakeElements(element, callback) {
            getData(element, function (vars, options) {
                // Check if options is empty
                if (!options.length) {
                    return;
                }
                // Add class to select element
                jQuery(element).addClass("select-step");
                // Add fake elements
                var incrementLabel = vars.incrementLabel, decrementLabel = vars.decrementLabel;
                // Find selected option on the select element
                var isSelected = [];
               ...