检查复选框何时开启

时间:2014-06-28 07:53:19

标签: jquery

当复选框从未选中状态更改为选中状态时,我需要运行功能。

所以我使用.change事件来触发所有内容,但在运行函数之前使用.prop检查以确保实际选中或取消选中该复选框,对吗?

<form>
  <input class="target" type="checkbox" value="Field 1">
</form>

$(".target").change( function(){
    if(this.prop("checked", true)){
        alert("this is checked");
    } else {
        alert("this is not checked");
    }
});

上面的代码不起作用,我不知道为什么......

我选择了.target,它正在调用.change事件监听器。

.targetthis,因为它正在调用.change方法。

因此该函数说“当.target更改时,检查.target的”已检查“属性是否为真。如果是,请提醒。否则,请提醒别人。”

.change的jQuery文档中,它说“当更改时,更改事件将发送给元素。”他们谈论的元素的.val,对吗?完全不同的“价值”。因为.val的{​​{1}}永远不会改变,因为它现在是硬编码的。

4 个答案:

答案 0 :(得分:1)

目前,您正在尝试在元素上调用方法prop(因为它不是jQuery对象,因此不存在)。你需要它检查值,而不是设置它。将this.prop("checked", true)更改为$(this).is(':checked')

答案 1 :(得分:1)

您正在使用prop的setter版本,也就是说您正在告诉复选框为checked。您应该使用prop的getter版本。

if($(this).prop('checked') === true){
    alert("this is checked");
} else {
    alert("this is not checked");
}

编辑:我的不好,迟到了,确定不正确使用道具。更新了此参考。

if(this.checked === true) { ...

答案 2 :(得分:1)

简单的方法是让$(this).is(":checked")来处理if或者像:

$(".target").change( function(){
    if($(this).is(":checked")){
        alert("this is checked");
    } else {
        alert("this is not checked");
    }
});

您需要检查是否已选中,未设置要检查的值。并且this没有.prop()您需要使用Jquery对象$(this)

LIVE DEMO

修改

我测试.is().prop()之后的表现有些错误.prop().is()快得多。

两者都会给我们相同的结果,但.is()更慢。

$(".target").change( function(){
        if($(this).prop(":checked")){
            alert("this is checked");
        } else {
            alert("this is not checked");
        }
    });

或者更快:

$(".target").change( function(){
            if(this.checked){
                alert("this is checked");
            } else {
                alert("this is not checked");
            }
        });

Test performance .is() vs .prop()

答案 3 :(得分:0)

试试这个:

演示 http://jsfiddle.net/kb3xa/

$(document).ready(function () {
     $(".target").click(function () {
     if ($(".target").is(":checked")) {
         alert("this is checked");
        }
         else{
          alert("this is not checked");
        }
     });
});