https://www.cnblogs.com/sandraryan/
jq實現購物車功能
點擊+- 增減數量,計算價格;
點擊刪除,刪除當前行(商品)
點擊- ,減到0 詢問是否刪除商品
點擊全選 計算總價(商品只有被選中才能計算總價)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> div, ul, li { margin: 0; padding: 0; } #wrap { width: 782px; box-shadow: 0 0 10px lightblue; margin: 100px auto; text-align: center; } li { font-size: 20px; color: gray; width: 100px; height: 24px; line-height: 30px; list-style: none; border: 1px solid lightgray; float: left; padding: 10px; } ul { height: 46px; display: block; margin: 0 auto; clear: both; background-color: rgb(212, 241, 250); } .num { width: 150px; } .num input { width: 30px; text-align: center; } .total { clear: both; text-align: right; padding: 10px; font-size: 20px; color: red; } ul span { border: 1px solid lightgray; padding: 2px 10px; border-radius: 5px; /* background-color: lightgray; */ color: gray; } </style> </head> <body> <div id="wrap"> <ul> <li><input name='all' type='checkbox'>all</li> <li>name</li> <li>price</li> <li class="num">number</li> <li>add</li> <li>operation</li> </ul> <ul> <li><input type="checkbox" name='one'>one</li> <li>phone</li> <li>1000.00</li> <li class='num'> <input type="button" value='-'> <input type="text" name='num' value="1"> <input type="button" value='+'> </li> <li class="price">1000.00</li> <li><span>delete</span></li> </ul> <ul> <li><input type="checkbox" name='one'>one</li> <li>phone</li> <li>1000.00</li> <li class='num'> <input type="button" value='-'> <input type="text" name='num' value="1"> <input type="button" value='+'> </li> <li class="price">1000.00</li> <li><span>delete</span></li> </ul> <ul> <li><input type="checkbox" name='one'>one</li> <li>phone</li> <li>1000.00</li> <li class='num'> <input type="button" value='-'> <input type="text" name='num' value="1"> <input type="button" value='+'> </li> <li class="price">1000.00</li> <li><span>delete</span></li> </ul> <div class="total">total: <span> 0.00 </span></div> </div> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script> <script> // 計算總價的函數 function calcTotal() { // 設置總價初始值 var total = 0; // 獲取所有name為one的input框 var allOne = $('input[name = "one"]'); // 獲取單價 var price = $('.price'); // name為one的input框,如果被選中了,計算總價 allOne.each(function () { if ($(this).prop('checked')) { // 獲取當前索引 var i = allOne.index($(this)); // eq()返回帶有被選元素的索引 total += parseFloat(price.eq(i).text()); } }); // 總價的值寫在頁面上 $('.total span').text(total); } $(function () { // 獲取ul里面的span(刪除鍵),注冊點擊事件 $('ul span').click(function () { // 彈出輸入框,如果用戶點擊了確認,返回true if (confirm('you delete your mother ne????')) { // 刪除當前刪除鍵坐在的ul行 $(this).parent().parent().closest('ul').remove(); // 否則。(用戶點擊取消)什么都不做 } else {} // 如果被選中了,改變總價,調用計算總價的函數 // 計算總價 calcTotal(); }); // 找到input 的name是num的元素,當內容改變時 $('input[name = "num"]').change(function () { // 獲取值並轉換為浮點數(數量) var val = parseFloat($(this).val()); // 如果值大於0,其父級的下一個兄弟的文本變成:當前值*當前值的父級的上一個元素值的浮點數 // 即 數量 * 單價 if (val > 0) { // 吧單價的值獲取並轉為浮點型 * 單價(當前元素的父級的下一個元素) $(this).parent().next().text(val * parseFloat($(this).parent().prev().text())); // 如果當前值為0 ,刪除按鈕trigger 觸發click事件 } else if (val == 0) { // 由於input[val = '-']獲取的是集合,三個全都刪掉了。在這里添加判斷,如果值為0,當前行執行delete點擊事件函數 if (confirm('you delete your mother ne????')) { $(this).parent().parent().closest('ul').remove(); } else {} calcTotal(); // $(this).parent().parent().remove(); //直接刪除 } else { //默認1 $(this).val(1); } calcTotal(); }); // - 按鈕 // 獲取減號,注冊點擊事件 $('input[value = "-"]').click(function () { // - 的下一個的值(數字)-1 轉為整形,設為-下一個元素(數字)的值 //就是點擊- 吧數字的值-- $(this).next().val(parseInt($(this).next().val()) - 1); // 數字值trigger change事件 $('input[name = "num"]').trigger('change'); }); // + 同理 $('input[value = "+"]').click(function () { $(this).prev().val(parseInt($(this).prev().val()) + 1); $('input[name = "num"]').trigger('change'); }); // 選擇框 選中一個框就執行一次計算價格的函數 $('input[name = "one"]').click(function () { calcTotal(); }); // 當選中全選框時候,操作全選或者反選 $('input[name = "all"]').click(function () { // prop方法設置或返回備選元素的屬性和值 // 當前元素(頂部復選框)被選中時(checked時) var ret = $(this).prop('checked'); console.log(ret); // 每一個單選框都添加checked屬性 $('input[name="one"]').each(function () { $(this).prop('checked', ret); }); calcTotal(); }); }); </script> </body> </html>
布局就這樣了~~~