jQuery:检查是否选中了复选框

jQuery:检查是否选中了复选框,jquery,Jquery,我有一个html页面,其中有多个“复选框”,每个复选框都是调用函数onclick 像这样的 onclick="manage(val1, val2) 在我的函数中,当我得到checkbox的check状态时,每次都给出false function manage(val1, val2) { **if ($(this).is(":checked")) {** //returns false everytime //do something // }

我有一个html页面,其中有多个“复选框”,每个复选框都是调用函数onclick

像这样的

onclick="manage(val1, val2)
在我的函数中,当我得到checkbox的check状态时,每次都给出false

function manage(val1, val2) {
    **if ($(this).is(":checked")) {** //returns false everytime
        //do something
        //
    }
    else {
        //do something
    }
}
请告诉我我在哪里做错了

提前感谢

当调用
manage(val1,val2)
时,
将是全局对象(如果处于严格模式,则未定义)

$('input[type="checkbox"]').click(function(){  // append click to any checkbox
    if ($(this).is(':checked')) {
        // do something
    }
});
但是您可以使用
call
手动设置
this
值。试试这个:

onclick="manage.call(this, val1, val2);"
现在,
这个
将是您刚才单击的任何内容

只是想进一步澄清一下,在
onclick=“\uuuuuuuuu”
中,这是您单击的内容。但一旦从那里调用函数,它就成为函数中的全局对象。因此:

onclick="foo(this);"

function foo(val) {
    alert(this);
    alert(val);
}
警报
[object DomWindow]
(全局对象),然后
[object HtmlInputElement]
(我单击的对象)


在不涉及太多细节的情况下,这是JavaScript中“函数调用”工作方式的结果

您需要设置onclick的上下文,或将其作为参数传递:

<input type="checkbox" onclick="manage(this, 'val1', 'val2');"></input>
<script>
function manage(that, val1, val2) {
   if ($(that).is(":checked")) {
       alert('checked')
    }
    else {
       alert('unchecked')
    }
}
</script>

功能管理(即val1、val2){
如果($(that).is(“:checked”)){
警报('已选中')
}
否则{
警报(“未选中”)
}
}


当然,最好不要使用内嵌javascript,使用TerryR编写的东西。

我可以发誓浏览器会自动这么做。。。编辑:或者我正在考虑什么时候可以完成类似onclick=“blah(this)”:)+1这样的操作,以使用
call
而不是仅仅作为常规参数传递。使其符合预期。ЖЖЖЖЖЖЖΞЖЖЖΞЖЖЖЖЖЖЖ-:(由于您的用户名,我永远不用担心评论太少)ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ,call和apply是我最喜欢在JavaScription中使用的一些工具,这是一个非常棒的名字。我认为调用和应用在JavaScript的设计中是不可或缺的:p.只是一些建议,这里有
:checkbox
选择器和
this.checked
。您的选择器可以利用QSA而无需任何预处理:)@alex:
[type=“checkbox”]
友好,除非我误解了您?@amnotiam:我想您误解了我:)@alex:啊,是的,很可能。我以为你是说
[type=“checkbox”]
会阻止
qSA
。完全同意您使用
此选项。尽管选中了
。)