我正在努力完全理解错误,因为有时候我可以绕过它而有时候我无法解决。我试过写一个函数:
function toggleButton() {
}
但我得到同样的错误。这是.js样本。
var checkBox = document.getElementById("chkMyBox");
checkBox.onclick = function toggleButton(e, obj1)
{
var btnElement = document.getElementById("btnMyButton");
if(btnElement != null) {
alert("Element not null");
if(e.target.checked && obj1 != null) {
alert("Checking check " + obj1.checked);
if(obj1.checked == true && btnElement.getAttribute('disabled') == false){
btnElement.getAttribute('disabled') = false;
} else {
btnElement.getAttribute('disabled') = true;
}
}
}
}
这是html:
<form id="frmCheckBox">
<input type="checkbox" id="chkMyBox" />
<button id="btnMyButton" disabled>I'm a Button</button>
</form>
答案 0 :(得分:5)
更改此行使用name
:
<input type="checkbox" name="chkMyBox" />
改为使用id
:
<input type="checkbox" id="chkMyBox" />
或者你可以使用:
var elements = document.getElementsByName('chkMyBox');
var element = elements[0]; //first element with that name in the array
或
var element = document.getElementsByName('chkMyBox')[0];
更新(由于OP更改了原始问题的代码):
function toggleButton(e, obj1)
这不起作用,因为回调函数(e
)只有一个参数。
使用e.target
获取元素。
答案 1 :(得分:1)
您正在尝试按名称获取元素。你必须这样做:
var checkBox = document.getElementsByName('chkMyBox')[0];
或者,如果你喜欢id。只需将id="chkMyBox"
添加到您的复选框输入中即可。
答案 2 :(得分:1)
这里有几个问题。
1)您尝试使用getElementById
获取按钮,但您的元素没有ID。最简单的解决方法是修复标记。
<input type="checkbox" name="chkMyBox" id="chkMyBox" />
2)您的事件处理程序有两个参数。通过DOM附加处理程序时,只有事件传递给您的处理程序。因此obj1
始终为undefined
。您需要从e
参数中获取复选框元素。
checkBox.onclick = function(e) {
var obj1 = e.target;
// rest of handler
}
3)您不应使用getAttribute
来检查被禁用/启用的元素。它将为您提供属性的文本值,该属性为空字符串。相反,使用DOM为您提供的布尔属性:
// toggle the disabled attribute
obj1.disabled = !obj1.disabled;