function precision(a) { var e = 1; while (Math.round(a * e) / e !== a) e *= 10; return Math.log(e) / Math.LN10; } function journal_enable_stepper() { var xprec = function xprecision(a) { var e = 1; while (Math.round(a * e) / e !== a) e *= 10; return Math.log(e) / Math.LN10; }; $('.stepper').each(function () { var xthis = $(this); if (xthis.data('_isEnabled')) { return; } xthis.data('_isEnabled', true); var xinput = xthis.find('input[name^="quantity"]'); var decimal_step = parseFloat(xinput.data('step')) || 1; var precision = xprec(decimal_step); var value = parseFloat(parseFloat(xinput.val()).toFixed(precision)); var minimum = parseFloat(xinput.data('minimum')) || 1; xthis.find('.fa-angle-up').on('click', function () { xinput.val(parseFloat(parseFloat(parseFloat(xinput.val()).toFixed(precision)) + parseFloat(parseFloat(decimal_step).toFixed(precision))).toFixed(precision)); xinput.trigger('change'); }); xthis.find('.fa-angle-down').on('click', function () { console.log(xinput.val()); console.log(minimum); if ((parseFloat(parseFloat(parseFloat(xinput.val()).toFixed(precision)) - parseFloat(parseFloat(decimal_step).toFixed(precision))).toFixed(precision)) >= minimum) { xinput.val(parseFloat(parseFloat(parseFloat(xinput.val()).toFixed(precision)) - parseFloat(parseFloat(decimal_step).toFixed(precision))).toFixed(precision)); xinput.trigger('change'); } }); var allowed_characters = [46,48,49,50,51,52,53,54,55,56,57]; xinput.on('keypress', function (e) { if ( e.which === 46 && xinput.val().indexOf('.') !== -1){ e.preventDefault(); } if ( (allowed_characters.indexOf(e.which) === -1) && [8].indexOf(e.which) === -1 ){ e.preventDefault(); } }); xinput.on('keydown', function (e) { if (e.which === 38) { e.preventDefault(); xinput.val(parseFloat(parseFloat(parseFloat(xinput.val()).toFixed(precision)) + parseFloat(parseFloat(decimal_step).toFixed(precision))).toFixed(precision)); xinput.trigger('change'); } if (e.which === 40) { e.preventDefault(); if (parseFloat(xinput.val()) > minimum) { xinput.val(parseFloat(parseFloat(parseFloat(xinput.val()).toFixed(precision)) - parseFloat(parseFloat(decimal_step).toFixed(precision))).toFixed(precision)); xinput.trigger('change'); } } }); xinput.on('blur', function () { if ((parseFloat(xinput.val()) || 0) < minimum) { xinput.val(value); xinput.trigger('change'); } }); }); }