/* Změna počtu kusů po kliknutí na tlačítko * Jako parametry bere input (s hodnotou a volitelnými atributy) * a jestli má hodnota přičíst (true) nebo odečíst (false). * Vrátí novou hodnotu inputu jako string. * Možné atributy: max, min, step, data-precision * */ function updatePieces($input, isUp) { var oldValue = parseFloat($input.val()); var maxValue = $input.attr('max'); var step = $input.attr('step') ? parseFloat($input.attr('step')) : 1; var minValue = $input.attr('min') ? parseFloat($input.attr('min')) : step; var precision = $input.data('precision') ? parseFloat($input.data('precision')) : 0; var newVal; if (isUp) { if (typeof(maxValue) === 'undefined' || (oldValue + step) <= parseFloat(maxValue)) { newVal = oldValue + step; } else { newVal = parseFloat(maxValue); } } else { if ((oldValue - step) >= minValue) { newVal = oldValue - step; } else { newVal = minValue; } } return newVal.toFixed(precision); } /* Zaokrouhlení počtu kusů po změně inputu * Jako parametry bere input (s hodnotou a volitelnými atributy). * Pokud je zadané množství které neopovídá stepu, hodnota se zaokrouhlí. * Aplikuje se omezení max a min atributy. * Vrátí novou hodnotu inputu jako string. * */ function roundPieces($input) { var newVal = parseFloat($input.val()); var maxValue = $input.attr('max'); var step = $input.attr('step') ? parseFloat($input.attr('step')) : 1; var minValue = $input.attr('min') ? parseFloat($input.attr('min')) : step; var precision = $input.data('precision') ? parseFloat($input.data('precision')) : 0; if (newVal % step > 0) { newVal = Math.round(newVal / step) * step; } if (newVal < minValue) { newVal = minValue; } if (!isNaN(maxValue) && newVal > parseFloat(maxValue)) { newVal = parseFloat(maxValue); } return newVal.toFixed(precision); } $('body').on('change', '[data-row-check]', function() { var $checkbox = $(this); var $input = $checkbox.closest('tr').find('.form-control'); var $table = $checkbox.closest('table'); if ($checkbox.prop('checked') === true) { $input.prop('disabled', false); $input.val($input.attr('max')); $('[data-returns]').not($table).find('th .custom-control-input').prop('checked', false).trigger('change'); } else { $input.prop('disabled', true); $input.val(''); } }).on('change', '[data-order-check]', function() { var $table = $(this).closest('table'); if ($(this).prop('checked') === true && $table.hasClass('closed')) { $table.toggleClass('closed'); } $table.find('td .custom-control-input').prop('checked', $(this).prop('checked')).trigger('change'); }).on('click', '[data-returns] th', function() { $(this).closest('table').toggleClass('closed'); }).on('click', '[data-returns] .buy_count button', function() { var $button = $(this); var $input = $button.closest('td').find('[data-pieces]'); var newVal = updatePieces($input, $button.hasClass('plus_unit')); $input.val(newVal); }).on('blur', 'input[data-pieces]', function() { var $input = $(this); var newVal = roundPieces($input); if (parseFloat(newVal) !== parseFloat($input.val())) { $input.val(newVal); } }).on('keydown', 'input[data-pieces]', function(e) { if (e.keyCode === 13) { e.preventDefault(); var $input = $(this); var newVal = roundPieces($input); if (parseFloat(newVal) !== parseFloat($input.val())) { $input.val(newVal); } } });