Sorry this is not a detailed description but a summary with all code
Add available quantities first – as shown in this article – How to show stock quantities in all variants of shopify
^The above part is utmost necessary. because the following functions use previous js variables.
So here we go. Good Luck!!
javascript on the product page
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <script> $(document).ready( function ($){ var $j= new jQuery.noConflict(); var qtyinput=$j( "#quantity" ); var qtyplus=$j( "#qtyplus" ); var maxallowed=parseInt($j(qtyinput).attr( 'max' )); var qtyminus=$j( "#qtyminus" ); var qtyvalue=parseInt($j(qtyinput).val()); setTimeout( function (){$j(qtyminus).removeClass( "hidden" ); $j(qtyplus).removeClass( "hidden" ); },8000); $j(qtyminus).click( function ($){ qtyvalue=parseInt($j(qtyinput).val()); maxallowed=parseInt($j(qtyinput).attr( 'max' )); if (qtyvalue<2){checkFreeze(); return ;} $j(qtyinput).val(qtyvalue-1); checkFreeze(); }); $j(qtyplus).click( function ($){ qtyvalue=parseInt($j(qtyinput).val()); maxallowed=parseInt($j(qtyinput).attr( 'max' )); // console.log(qtyvalue + " -- - -" + maxallowed); if (maxallowed<=qtyvalue){ checkFreeze(); return ;} $j(qtyinput).val(qtyvalue+1); checkFreeze(); }); }); </script> |
html tags on product page. make sure you add these AROUND quantity input
< a id = qtyminus class = "freeze fa fa-minus hidden" ></ a > < input class = "select-on-focus" min = 1 type = "text" size = "3" id = "quantity" name = "quantity" value = "1" {% if issingle %} max = "{{ current_variant.inventory_quantity }}" {% endif; %}/> < a id = qtyplus class = "{% if current_variant.inventory_quantity==1 %}freeze {% endif; %}fa fa-plus hidden" ></ a > |
javascript function inside your theme.js. Reason: so that this gets loaded aka defined before updateSku is called()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function checkFreeze(){ $j= new jQuery.noConflict(); var qtyinput=$j( "#quantity" ); var qtyplus=$j( "#qtyplus" ); var maxallowed=parseInt($j(qtyinput).attr( 'max' )); var qtyminus=$j( "#qtyminus" ); var qtyvalue=parseInt($j(qtyinput).val()); //alert("max is "+maxallowed); if (maxallowed==0 || maxallowed===undefined){ $j(qtyplus,qtyminus).addClass( "freeze" ); $j(qtyinput).val(0); return ; } qtyvalue=parseInt($j(qtyinput).val()); if (qtyvalue>=maxallowed){ //newval=1; $j(qtyinput).val(maxallowed); $j(qtyplus).addClass( "freeze" ); } else { if (qtyvalue<1) $j(qtyinput).val(1); $j(qtyplus).removeClass( "freeze" ); } qtyvalue=parseInt($j(qtyinput).val()); if (qtyvalue>1){ $j(qtyminus).removeClass( "freeze" );} else { $j(qtyminus).addClass( "freeze" ); } }; |
changes in function updatesku. Add these lines inside the function. Make sure you have already followed part1
1 2 3 | if (inv_qty[ variant.id ]!==undefined)$( "#quantity" ).attr( 'max' ,inv_qty[ variant.id ]); else $( "#quantity" ).attr( 'max' ,0); $(document).ready( function (){checkFreeze();}); |
After making changes as discussed in part1 and this article, the final updatesku function looks somewhat this
1 2 3 4 5 6 7 8 9 10 | _.updateSku = function (variant, $container){ $container.find( '.sku .sku__value' ).html( variant ? variant.sku : '' ); $container.find( '.sku' ).toggleClass( 'sku--no-sku' , !variant || !variant.sku); if (inv_qty[ variant.id ] <1 || inv_qty[ variant.id ]==undefined)$( "#stockstatus" ).html( "<p class=bomb>Sold Out!</span></p>" ); else if (inv_qty[ variant.id ] <6)$( "#stockstatus" ).html( "<p class=fire>Hurry! Only <span class='variant-inventory'>" + inv_qty[ variant.id ] + "</span> left in stock.</p>" ); else $( "#stockstatus" ).html( "<p class=grass><span class='variant-inventory'>" + inv_qty[ variant.id ] + "</span> available in stock.</p>" ); if (inv_qty[ variant.id ]!==undefined)$( "#quantity" ).attr( 'max' ,inv_qty[ variant.id ]); else $( "#quantity" ).attr( 'max' ,0); $(document).ready( function (){checkFreeze();}); } |
CSS – can be added in custom.css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #qtydiv a{ border : 1px solid #777 ; border-radius : 3px ; font-size : 16px ; padding : 0 ; line-height : 30px ; width : 30px ; background : #efefef ; color : #444 ; height : 30px ; vertical-align : baseline ; text-align : center ; cursor : pointer ; margin : 0 5px ;} #qtydiv a.freeze{ cursor :not-allowed; border : 1px solid #eee ; color : #bcbcbc ;} |
Leave a Reply