2017-07-03 46 views
0

我无法删除使用复选框添加的类。该复选框被选中以开始。当它被用户取消选中时,它会添加一个“hideRect”类,并带有分类('hideRect',true); 这很有效,但是当我再次检查这个盒子的时候,班级并没有消失。D3使用分类()使用复选框添加和删除类

这里是我的代码:

this.$node.append('input') 
    .attr('type', 'checkbox') 
    .attr('checked', true) 
    .attr('value', 'med') 
    .on('click',() => this.updateRectLine()); 
    } 

private updateRectLine() { 

    //var rect = this.$node.getElementsByClassName('.MEDICATION'); 
    var cbMed = this.$node.attr("checked"); 
    if (cbMed !== true){ 
     this.$node.selectAll(".MEDICATION").classed('hideRect', true); 
    } 

    else if (cbMed == true){ 
     this.$node.selectAll(".MEDICATION").classed('hideRect', false); 
    } 

}

在此先感谢!

+0

元素w /类'.MEDICATION'和复选框之间的关系是什么?在函数的第一行中,尝试记录该选择的值以查看它是否包含您期望的元素。 – anbnyc

+0

嘿@anbnyc感谢您的回复!我可以看到该类添加到控制台中的正确元素,所以我知道它的目标是正确的选择,但它不会删除该类! – jrogers12

+0

想不到还有什么问题。如果你可以提供一个可重现的例子(比如JSFiddle),那么可以告诉更多。这可能不是相关的,但你可能希望三等于('cbMed === true')来检查'else if'之后。 – anbnyc

回答

2

您需要更新这个函数的这样

private updateRectLine() { 
    var cbMed = this.$node.select("input[type='checkbox']").prop("checked"); 
    if (!cbMed) 
    this.$node.selectAll(".MEDICATION").classed('hideRect', true); 
    else 
    this.$node.selectAll(".MEDICATION").classed('hideRect', false); 
} 

.attr()函数只返回复选框被初始化,以检查复选框的检查状态的值,你要使用属性checked出现在复选框元素

+0

感谢您的回复! – jrogers12