0

我试图完全理解一个错误,因为有时我可以绕过它,而有时我不能。我试过只写一个函数:

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>

http://jsfiddle.net/Arandolph0/h8Re6/3/

4

3 回答 3

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获取元素。

于 2013-07-15T16:09:26.407 回答
1

你在这里有几个问题。

1)您尝试通过 using 获取按钮,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;
于 2013-07-15T16:16:59.760 回答
1

您正在尝试通过其名称获取元素。你必须这样做:

var checkBox = document.getElementsByName('chkMyBox')[0];

或者,如果您更喜欢 id。只需添加id="chkMyBox"到您的复选框输入。

于 2013-07-15T16:09:52.507 回答