开发者问题收集

未捕获的类型错误无法设置空控制台输出的属性“className”

2015-11-24
1834

我有这个 html 代码:

<input type="checkbox" id="template-contactform-baggages-custom" name="baggages" value="baggages" class="sm-form-control" onchange="showcheck(this, numbag)" />
<div id="numbag" class="hidden">
    <input type="number" name="numofbag" value="" />
</div>

和这个 javascript 函数:

function showcheck(check, inputid) {

var checkid=check.id;
var checked=check.checked;
var inputelement = document.getElementById(inputid);

if(!checked){
    inputelement.className = "";
    inputelement.className = inputelement.className + "hidden";

}else{
    inputelement.className = "";
    inputelement.className = inputelement.className + "nothidden";

 } 

}

正如你所见,当我选中复选框时,我想隐藏或显示隐藏的 div, 我认为我的函数一切正常,但控制台有不同的想法..! 未捕获的 TypeError:无法将属性“className”设置为 null,是输出吗?

有人能帮我吗?

附言:我之前做过一个具有相同逻辑的函数,没有问题

1个回答
onchange="showcheck(this, numbag)"

应该是

onchange="showcheck(this, 'numbag')"

并且,您需要在设置 className 时添加一个空格。但问题是您的代码将继续添加类,因此它将同时隐藏和不隐藏。您应该使用 classList

inputelement.classList.toggle('hidden', !checked);
inputelement.classList.toggle('nothidden', checked);

并且由于您只是在设置类(错过了清除它的部分),因此您只需执行三元运算符即可。

inputelement.className = checked? "nothidden" : "hidden";
epascarello
2015-11-24