摘要: $(document).ready(function(){ doPrice() /*移上变橙色方法1: $('.fa-check').mouseover(function(){ &

$(document).ready(function(){
doPrice()
/*移上变橙色方法1:
$('.fa-check').mouseover(function(){
if($(this).attr!="fa fa-check checked"){
$(this).css('color','#ff6700')
}
})
移开背景色变白
$('.fa-check').mouseleave(function(){
if($(this).attr!="fa fa-check checked"){
$(this).css('color','#fff')
}
})*/
//方法2:
$('.fa-check').hover(
function(){
if($(this).attr('class')!="fa fa-check checked"){
$(this).css('color','#ff6700')
}
},
function(){
$(this).css('color','#fff')
}
)
/*思路总结:
1、所有的自选框都是使用同样的字体库进行引入;
2、首先获取当前自选框的claSS 判断不等于选中的class;
3、不等于执行修改当前自选框div的字体色为橙色
4、等于则执行字体色为白色
小结:可以使用点击事件,也可以使用.hover切换事件来执行
*/
//普通点击事件
$('.fa-check').click(function(){
/*方法1
var cla=$(this).attr('class');
var cla1='fa fa-check checked';
if(cla!=cla1){
$(this).attr('class','fa fa-check checked');
}else{
$(this).attr('class','fa fa-check')
}*/
//方法2:三目运算符
$(this).attr('class')!='fa fa-check checked'?$(this).attr('class','fa fa-check checked'):$(this).attr('class','fa fa-check');
doCheckAll()
doPrice()
})
/*普通点击事件总结
1、首先获取返回当前选择框的class
2、然后判断是否选中
3、如果当前选择框class不等于选中,点击执行修改新的class为选中
4、否则当前选择框class等于选中,则执行修改新的class为不选中
*/
//全选框按钮控制
function doCheckAll(){
var allitem=$('.list-item i[class*="fa-check"]').length
var checkeditem=$('.list-item i[class$="checked"]').length
if(allitem!=checkeditem){
$('#check-all').attr('class','fa fa-check')
}else{
$('#check-all').attr('class','fa fa-check checked')
}
}
/*全选框按钮控制总结
1、先获得每一个单选择框所在div里i元素的class,并检测长度赋值给变量
2、然后再获得每一个单选择框所在div里i元素的class被选中,获得长度并赋值
3、然后判断每一个单选框所在div长度不等于被选中,则是单选框有未选中的,执行全选框i元素 不被选中
4、否则长度等于被选中,则执行全框框i元素被选中。
5、因为遍历的整个list-item单选框,所以需要再普通点击事件调用此函数。
*/
//全选点击事件
$('#check-all').click(function(){
/* var cla=$(this).attr('class');
var cla=$(this).attr('class')
var cla1='fa fa-check checked';
if(cla!=cla1){
$('.fa-check').attr('class','fa fa-check checked');
}else{
$('.fa-check').attr('class','fa fa-check');
}
*/
//方法2 三目运算
$(this).attr('class')!='fa fa-check checked'?$('.fa-check').attr('class','fa fa-check checked'):$('.fa-check').attr('class','fa fa-check');
doPrice()
})
/*全选点击事件总结
1、所有的选择框都是通过i元素引用字体库来实现的,所以他们的class名是一致的,所以全选使用了id来做区分,点击全选按钮事件
2、获得当前全选框i元素的class
3、判断当前全选框不等于选中,点击则执行选中所有的选择框
4、判断当前全选框等于选中,点击侧执行不选中所有选择框
*/
//加减按钮
$('.plus').click(function(){
var nowvalue=$(this).siblings('input').val()
var nowvalue=parseInt(nowvalue)
var currentvalue=0
var currentvalue=nowvalue+1
$(this).siblings('input').val(currentvalue)
/*加号总结
1、找到加号的class做点击事件
2、当前的加号通过siblings获得指定同胞元素input,并通过val获得value值,并赋值给变量
3、此时返回的value值是文本,需要使用parseInt 转换成数字整数并赋值给变量
4、再建立一个存储value值的变量为0,然后每点击一次就+前面value的值。
5:获取指定同级元素的value值,然后转换成数字整数,然后点击一次+1.
注:获取指定同级元素的value值,然后转换成数字整数,点击一次value值+1
*/
//获取商品单价
var danjia=parseFloat($(this).parents('.good-num').siblings('.good-price').html())
var xiaoji=danjia*currentvalue
$(this).parents('.good-num').siblings('.good-total-price').html(xiaoji+'元')
doPrice()
})
获取商品单价
1、当前的加号使用parents找到指定的父级,然后通过指定父级找到父级同级元素并返回元素内容,
然后使用parseFloat取数字部分,赋值给单价;
2、使用value数量值*单价 就是小计,然后找到小计的 div修改值就行。
注:就是寻找加号和单价关系,使用指定父级、同级、或者祖先、子元素,只要能找到单价获得元素内容,
并剔除文字 解析出数字。
减号获取商品单价也是一样的,只是点击的减号div触发事件而已。
*/
//减号
$('.minus').click(function(){
var nowvalue=$(this).siblings('input').val()
var nowvalue=parseInt(nowvalue)
var currentvalue=0
nowvalue<=1?currentvalue=1:currentvalue=nowvalue-1
$(this).siblings('input').val(currentvalue)
//获取商品单价
var danjia=parseFloat($(this).parents('.good-num').siblings('.good-price').html())
var xiaoji=danjia*currentvalue
$(this).parents('.good-num').siblings('.good-total-price').html(xiaoji+'元')
doPrice()
})
/*减号总结
1、获得当前减号的同级input框的value值,此时值为文本赋值给变量,
2、使用parseInt把文本值转换成数字整数
3、定义一个现实结果的变量
4、判断value值是否小于等于1,如果小于等于1的时,则结果变量为1。
5、如果value值大于1,则结果变量就-1
6、最后找到当前的input框修改value值为结果变量
获取指定同级元素的value值,然后转换成数字整数,然后判断是否小于等于1,小于等于则为1,大于点击一次+1 使用if else也可以
*/
//统计所有勾选的值
function doPrice(){
var checkeditems=$('.list-item i[class$="checked"]').parents('.select').siblings('.good-total-price')//选中小计的价钱
var totalprice=0//储存总计
for(var i=0;i<checkeditems.length;i++){
totalprice+=parseFloat(checkeditems[i].innerHTML)
}
$('.sum-price').html(totalprice)
//获取每一个单选框i元素的class 赋值给变量items
var items=$('.list-item i[class*="fa-check"]')
//选中多少件(选中小计div的数量的长度)
$('.select-count').html(checkeditems.length)
//总商品数(每一个单选框的长度)
$('.all-count').html(items.length)
}
/*统计所有被勾选div的小计价格累加的值
1、获取每被选中单选框div 小计的价钱, 通过被选中i元素 的父级div 查找到父级div的同级价格小计div
2、建立存储总计的变量
3、使用for循环,判断被勾选的价格小计div的长度,也就是遍历整个被勾选的div,并使用innerHTML返回文本内容
4、每调用一次变量,存储总计变量就+被勾选div的文本值(使用parseFloat筛选到数字到浮点数,屏蔽了字符元;
5、在合计div的输出总计变量。
注:合计变量必须先在就绪函数后先清零,然后因为全选、单选、数量增加和减少都影响到合计变量,所以需要再这些地方调用合计函数。
*/
})
批改老师:天蓬老师批改时间:2019-03-08 09:33:11
老师总结:实际项目中, 这样的购买单计算总价操作, 都是采用数据的双向绑定来实现的, 模型上比这个要简单些, 有空了解一个vue