$("").on('click', '.btn-number', function(e) { e.preventDefault(); console.log('click'); console.log($(this)); var type = $(this).attr('data-type'); var parent = $(this).closest(".insert-quantity-row"); var input = parent.find("input"); var disp = parent.data("disp"); var qtamin = parent.data("qtamin") || 0; var qtamul = parent.data("qtamul") || 1; var currentVal = input.val() && input.val() != '' ? parseInt(input.val()) : 0; // disp == -1 when it's reservation order if ($(this).hasClass("enabled") && !isNaN(currentVal)) { if (type == 'minus' && (input.prop('min') == '' || currentVal >= input.prop('min'))) { if (disp != -1) { if (currentVal > disp) { // qty was over the max input.val(disp < qtamin ? '' : disp - ((disp - qtamin) % qtamul)).change(); } else { if (currentVal == qtamin) { input.val('').change(); } else { input.val(currentVal - qtamul >= qtamin ? currentVal - qtamul : '').change(); } } } else { if (currentVal - qtamul < qtamin) { input.val(currentVal - qtamul > 0 ? qtamin : '').change(); } else { input.val(currentVal - qtamul).change(); } } } else if (type == 'plus' && (input.prop('max') == '' || currentVal < input.prop('max'))) { if (disp != -1) { if (currentVal < qtamin) { if (qtamin <= disp) { input.val(parseInt(qtamin)).change(); } } else { if (currentVal + qtamul <= disp) { input.val(parseInt(currentVal) + parseInt(qtamul)).change(); } } } else { input.val((currentVal < qtamin) ? parseInt(qtamin) : parseInt(currentVal) + parseInt(qtamul)).change(); } } } if (input.val() < $(this).prop('max')) { $(this).parent().siblings('.text-danger').hide(); $(this).removeClass("over-max"); } }); $("").on('focusin', '.input-number', function() { $(this).data('old_value', $(this).val()); }); $("").on('change', '.input-number', function() { if ($(this).val() == 0) { $(this).val(""); } valueCurrent = $(this).val() != '' ? parseInt($(this).val()) : 0; var parent = $(this).closest(".insert-quantity-row"); var min_btn = parent.find(".minus-qty"); var plu_btn = parent.find(".plus-qty"); var input = parent.find("input"); var disp = parent.data("disp"); var qtamin = parent.data("qtamin"); var qtamul = parent.data("qtamul"); // Set to old value, if: // - Current value between 0 and qtamin // - Current value greater than qtamin and current value - qtamin not multiple of qtamul // - Current value greater than availability (if availability order -> disp != -1) if ((valueCurrent > input.attr('min') && valueCurrent < qtamin) || (valueCurrent > qtamin && ((valueCurrent - qtamin) % qtamul != 0)) || (disp != -1 && valueCurrent > disp)) { let oldValue = parseInt($(this).data('old_value')); if (!oldValue) { oldValue = qtamin; } $(this).val(oldValue); } else { $(this).data('old_value', $(this).val()); } if (parseInt(input.val()) == input.attr('min') || input.val() == '') { min_btn.addClass('disabled'); min_btn.removeClass('enabled'); } else { min_btn.addClass('enabled'); min_btn.removeClass('disabled'); } if (parseInt(input.val()) == input.attr('max') || (parseInt(input.val()) + qtamul) > input.attr('max') || (disp != -1 && disp < qtamin) ) { plu_btn.addClass('disabled'); plu_btn.removeClass('enabled'); } else { plu_btn.addClass('enabled'); plu_btn.removeClass('disabled'); } if (input.val() <= $(this).prop('max')) { $(this).parent().siblings('.text-danger').hide(); $(this).removeClass("over-max"); } }); $("").on('keydown', '.input-number', function (e) { // Allow: backspace, delete, tab, escape, enter and .