对象引用对checkbox单选的影响

158 阅读1分钟

记录一次自己觉得诡异的地方,可能是我还没摸透原理的原因,在checkbox点击触发的时间里,需要操作一个集合的增删,但全选和单选、反选未能达到预期效果,最终发现是对象引用引起的,深拷贝后解决了该情况。

oneSelect:function(drugs,index,event,detailsList){//单选
    if (event.target.checked) {
        addDrugs(index,drugs,detailsList)
    } else {
        //全选样式改变
        $(".all:eq("+index+")").removeProp('checked')

        //取消选中触发事件,移除药品
        reduceDrugs(index,drugs)
    }
},
function addDrugs(index,drugs,detailsList){
     var dd=JSON.parse(JSON.stringify(recipel_info.recipelInfo[index].chooseDrugs))
    dd.push(drugs)
    recipel_info.recipelInfo[index].chooseDrugs=dd
    if(dd.length===detailsList.length){//全选
        $(".all:eq("+index+")").prop('checked',true)
    }

    console.log('drugs',recipel_info.recipelInfo[index].chooseDrugs)
}


function reduceDrugs(index,drugs){
    //取消选中触发事件,移除药品
    var dd=JSON.parse(JSON.stringify(recipel_info.recipelInfo[index].chooseDrugs))
    for(var i=0;i<dd.length;i++){
        if(dd[i].flow===drugs.flow){
            dd.splice(i,1)
            break
        }
    }
    recipel_info.recipelInfo[index].chooseDrugs=dd
    console.log('drugs',recipel_info.recipelInfo[index].chooseDrugs)
}