是否可以将这两个功能合二为一?

直流电

我有两个基本相同的功能。第一个函数传递了一个鼠标事件,其中 event.target 是输入类型='checkbox' 第二个函数传递了输入类型='checkbox' 有没有办法将它们重写为一个函数?

function crewChecked(event){                
    if(event.target.checked){
        names.push(event.target.value)
    }else{
        for(let i = 0; i < names.length;i++){
            if(names[i] == event.target.value){
                names = names.filter((name, index) => index !== i);
                break;
            }
        }
    }
    if(names.length==0){
        document.getElementById('dropdownCrewButton').innerText = "Select Crew"
    }else{
        document.getElementById('dropdownCrewButton').innerText = names.length + " crew"
    }
}


function crewChecked2(crewCheckbox){
    if(crewCheckbox.checked){
        names.push(crewCheckbox.value)
    }else{
        for(let i = 0; i < names.length;i++){
            if(names[i] == crewCheckbox.value){
                names = names.filter((name, index) => index !== i);
                break;
            }
        }
    }
    if(names.length==0){
        document.getElementById('dropdownCrewButton').innerText = "Select Crew"
    }else{
        document.getElementById('dropdownCrewButton').innerText = names.length + " crew"
    }
}
亚历克斯·韦恩

这两个函数中唯一不同的部分是如何获取对复选框的引用。因此,如果您弄清楚如何在这两种情况下获得该复选框,那么您就是黄金。

就像是:

function crewChecked(eventOrCheckbox){          
      
    // Added
    const checkbox = eventOrCheckbox.target || eventOrCheckbox

    if(checkbox.checked){
        names.push(checkbox.value)
    }else{
        for(let i = 0; i < names.length;i++){
            if(names[i] == checkbox.value){
                names = names.filter((name, index) => index !== i);
                break;
            }
        }
    }
    if(names.length==0){
        document.getElementById('dropdownCrewButton').innerText = "Select Crew"
    }else{
        document.getElementById('dropdownCrewButton').innerText = names.length + " crew"
    }
}

此行检查参数target属性eventOrCheckbox如果有,则它是一个事件,复选框应保存到checkbox. 如果没有,则假设此参数复选框并继续。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章