Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript';函数未定义';使用JSFIDLE时出错_Javascript_Html - Fatal编程技术网

JavaScript';函数未定义';使用JSFIDLE时出错

JavaScript';函数未定义';使用JSFIDLE时出错,javascript,html,Javascript,Html,我试着完全理解一个错误,因为有时候我可以绕过它,有时候我不能。我试着写一个函数: function toggleButton() { } 但我也犯了同样的错误。这是.js示例 var checkBox = document.getElementById("chkMyBox"); checkBox.onclick = function toggleButton(e, obj1) { var btnElement = document.getElementById("btnMyB

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

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>

我是一颗纽扣

更改使用
名称的此行:

<input type="checkbox" name="chkMyBox" />    
或者,您可以使用:

var elements = document.getElementsByName('chkMyBox');
var element = elements[0]; //first element with that name in the array

更新(OP更改了原始问题的代码)

function toggleButton(e, obj1) 
这不起作用,因为回调函数只提供了一个参数(
e
)。
使用
e.target
获取元素。

您试图通过名称获取元素。您必须执行以下操作:

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

或者,如果您喜欢按id。只需将
id=“chkMyBox”
添加到您的复选框输入。

您在这里遇到了几个问题

1) 您尝试使用
getElementById
获取按钮,但您的元素没有id。最简单的修复方法是修复标记

2) 事件处理程序接受两个参数。当通过DOM附加处理程序时,只有事件被传递给处理程序。因此,
obj1
将始终是
未定义的
。您需要从
e
参数中获取checkbox元素

checkBox.onclick = function(e) {
    var obj1 = e.target;
    // rest of handler
}
3) 您不应该使用
getAttribute
检查元素是否被禁用/启用。它将为您提供属性的文本值,该值为空字符串。相反,请使用DOM提供的布尔属性:

// toggle the disabled attribute
obj1.disabled = !obj1.disabled;

首先,你的HTML是错误的。您试图按ID引用复选框,但从未给过它ID。您没有按ID获取元素。您试图按元素的名称获取元素。请不要在一些人发布答案后更正代码,这会使您很难理解。@April-您的原始代码有几个问题需要解决。你的编辑与你原来的帖子毫无关系,因此一些答案毫无用处。他应该把名字保留在上面。删除名称可能会导致意外结果。
checkBox.onclick = function(e) {
    var obj1 = e.target;
    // rest of handler
}
// toggle the disabled attribute
obj1.disabled = !obj1.disabled;