$(this).checked没有拿起复选框

时间:2014-01-14 20:49:36

标签: javascript jquery

我有一个没有正确拾取复选框的功能(如果选中) 有了这个功能:

function playerJson() {
    players = [];
    $('input[name=playerCheckList]').each(function () {
        if ($(this).checked) {
            players.push($(this).val());
        }
    });

    return $.toJSON(players);
}

我使用此功能检查所有按钮(正确)

 $(function () {
    $("#checkAllPlayers").click(function () {
        $('input[name=playerCheckList]').each(function () {
            $(this).prop('checked', true);
        });
    });
});

如果我没有if语句:

if($(this).checked)

从第一段代码中,它正确地获取所有值(已检查或未检查)

所以,这个陈述可能是个问题,但我不确定原因。

由于

3 个答案:

答案 0 :(得分:9)

这是指一个jQuery对象,它没有'checked'属性(但DOM会拥有该属性)。您需要获取属性值。

$(this).prop("checked");

修改:我支持qwertynl's answer,因为vanilla.js

答案 1 :(得分:5)

$(this).checked不起作用,因为$(this)是一个jQuery对象。只需查看DOM对象的checked属性(this):

...
if (this.checked) {
    players.push(this.value);
}
...

答案 2 :(得分:3)

正如其他答案所说,.checked不适用于jQuery对象。

通过这种方式更容易看到:

$(this).checked返回undefined / error,因为它是一个jQuery对象,而不是一个元素 $(this)[0].checked返回checked的值,因为您正在引用元素本身,而不是引用该元素的jQuery对象。

下面是脚本的修改版本,完全不再使用jQuery checkedvalue,因为它们是jQuery的无意义使用。另一种用途更有意义,因此它将保留在我的答案中。

function playerJson() {
        players = [];
        $('input[name=playerCheckList]').each(function () {
            if (this.checked) {
                players.push(this.value);
            }
        });
        return $.toJSON(players);
    }