Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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函数引用错误,函数未定义_Javascript_Checkbox - Fatal编程技术网

Javascript函数引用错误,函数未定义

Javascript函数引用错误,函数未定义,javascript,checkbox,Javascript,Checkbox,我有以下HTML: <input type='checkbox' onchange='checkvalue(this)' def='checked' value='checked' /> 基本上,每当复选框被选中或取消选中时,我想调用这个javascript函数,它将查看复选框的默认值是否被选中或取消选中,然后相应地更改该值-如果复选框的默认值为选中并被单击,则该值应更改为未选中,反之亦然。但是,当我单击复选框时,出现以下错误: Uncaught ReferenceError: c

我有以下HTML:

<input type='checkbox' onchange='checkvalue(this)' def='checked' value='checked' />
基本上,每当复选框被选中或取消选中时,我想调用这个javascript函数,它将查看复选框的默认值是否被选中或取消选中,然后相应地更改该值-如果复选框的默认值为选中并被单击,则该值应更改为未选中,反之亦然。但是,当我单击复选框时,出现以下错误:

Uncaught ReferenceError: checkvalue is not defined (index):38
onchange

这里是指向我的JSFIDLE的链接:

函数/标识符
checkvalue
是“on ready”函数的本地函数

要从内联事件属性使用
checkvalue
,必须使其可从相关(全局)范围访问。比如说,

$(document).ready(function(){
   function checkvalue(){
     // ..
   }
   window.checkvalue = checkvalue;
});
然而,简单地消除内联事件的使用通常是首选。如果元素ID未知,或者事件必须应用于多个元素,则可以使用(即)

jQuery(function($){
   function checkvalue() {
     // ..
   }

   // ideally you'd pick a more refined ancestor than "document"
   $(document).on("click", "checkbox", checkvalue);
});
而且,如果您继续使用内联事件,并且确实修复了第一个提到的问题,那么您还必须使用
apply
来正确设置上下文,或者
将对处理程序中的窗口对象求值,这将毫无乐趣,并导致其他错误

onclick="checkvalue.apply(this)"

checkvalue
不在全局范围内。它位于
ready
处理程序的本地,该处理程序是一个匿名函数

我建议不要使用
onclick=“…”
。如果您已经在使用jQuery,还可以使用jQuery绑定事件:

$("#myCheckBox").on("click", checkvalue); //you will need to give your checkbox
                                          //an id
您可以在
onReady
处理程序中执行此操作

我注意到的另一件事是:

if($(this).attr("value") != "checked")
这是行不通的。复选框的值与是否选中无关。使用
:选中的
伪选择器代替
。is

if($(this).is(":checked"))

您意识到该值与复选框是否被选中无关?
if($(this).is(":checked"))