I use php to create some html product elements for a shopping cart based on a database .
The problem was that if I changed the product quantity and refreshed my page the quantity is changed back to '1' . So I used localStorage to store the quantities of each product . If I refresh , the quantities remain unchanged succesfully but If I click on '+' image element to add to quantity the input value on the product quantity change is displayed only if I refresh my page. So the problem is how to update my code to dynamically add to product quantity and save the quantity to localstorage the same time .
My code :
cart.php
<div class="cart__table table-responsive">
<table width="100%" class="table" id ="cartItems">
<thead>
<tr>
<th>PRODUCT</th>
<th>NAME</th>
<th>UNIT PRICE</th>
<th>QUANTITY</th>
<th>TOTAL</th>
</tr>
</thead>
<tbody>
<?php
if(isset($_COOKIE)){
$count = 0;
foreach($_COOKIE as $i){
$count++;
if($count ==1 ){
continue;
}
$product = json_decode($i,true);
echo "
<tr
class ='product-columns'>
<td class ='product__thumbnail'>
<img src = ".$product["image"]." />
</td>
<td class='product__name'>
<h3> ".$product["called"]." </h3>
<small class = 'cartItemID' style = 'display:none;'> ".$product["code"]." </small>
<small>".$product["soldAt"]."</small>
</td>
<td class='product__price'>
<div class='price'>
<span class='new__price'>".$product["costs"]."</span>
</div>
</td>
<td class='product__quantity'>
<div class='input-counter'>
<div>
<span class='minus-btn'>
<svg>
<use xlink:href='../images/sprite.svg#icon-minus'></use>
</svg>
</span>
<!--this is the element i want to change -->
<input
type='text' min='1'
max='10'
class='counter-btn' disabled
name = ".$product["code"]."
/>
<span class='plus-btn' >
<svg>
<use xlink:href='../images/sprite.svg#icon-plus'></use>
</svg>
</span>
</div>
</div>
</td>
<td class='product__subtotal'>
<div class='price'>
<span class='new__price'>$250.99</span>
</div>
<a class='remove__cart-item'>
<svg>
<use xlink:href='../images/sprite.svg#icon-trash'></use>
</svg>
</a>
</td>
</tr>
";
}
<!-- when the php loads set input values to localstorage values -->
echo "
<script type = 'text/javascript'>
var quantities = document.querySelectorAll('.counter-btn');
quantities.forEach(q=>q.value = getSavedValue(q.name));
</script>
";
}else{
echo "<h1> No products have been added. </h1>";
}
?>
</tbody>
</table>
</div>
So with the above code I create html elements using php and set their quanity input to localstorage value of corresponding element
In a jquery script I have function to add to quantity when you click '+' and update localstorage
jquery.js
//Save the value function - save it to localStorage as (ID, VALUE)
function saveValue(e){
var name = e.name; // get the sender's id to save it .
var val = e.value; // get the value.
localStorage.setItem(name, val);// Every time user writing something, the localStorage's value will override .
}
//get the saved value function - return the value of "v" from localStorage.
function getSavedValue (v){
if (!localStorage.getItem(v)) {
return "1";// You can change this to your defualt value.
}
return localStorage.getItem(v);
}
function changeValue(name,val){
localStorage.setItem(name , val);
}
//document ready
$(".plus-btn").click((e)=>{
var itmQuantity = parseInt($(e.target).closest('tr').find('.counter-btn').val());
console.log(itmQuantity); //number
if(itmQuantity!=10){
$(e.target).closest('tr').find('.counter-btn').attr('value' , itmQuantity+1);
var cd = $(e.target).closest('tr').find('.counter-btn').attr('name');
changeValue(cd,itmQuantity+1);
}
});
question from:
https://stackoverflow.com/questions/65843970/change-input-value-of-element-with-jquery-based-on-localstorage 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…