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

She*_*eto 2 javascript jquery

我有一个功能,没有使用此功能正确拾取复选框(如果选中):

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

    return $.toJSON(players);
}
Run Code Online (Sandbox Code Playgroud)

我用这个功能检查所有按钮(正确)

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

如果我没有if语句:

if($(this).checked)

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

所以,这个陈述可能是问题所在,但我不确定为什么.

谢谢

Ste*_*her 9

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

$(this).prop("checked");
Run Code Online (Sandbox Code Playgroud)

编辑:我支持qwertynl的答案,因为vanilla.js

  • 或者`$(this).is(':checked')` (6认同)

小智 6

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

这样更容易可视化:

$(this).checked返回未定义/错误,因为它是 jQuery 对象,而不是元素。
$(this)[0].checked返回 的值,checked因为您引用的是元素本身,而不是引用该元素的 jQuery 对象。

下面是脚本的修改和修复版本,完全消除了 jQuery 的使用checked,因为value它们对 jQuery 的使用毫无意义。另一种用法更有意义,因此它将保留在我的答案中。

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

  • _"$(this0[0].checked 返回已检查的值"_,不,它会抛出错误(_不是反对者_。) (2认同)

qwe*_*ynl 5

$(this).checked不起作用,因为$(this)是一个jQuery对象.

只需查看checkedDOM对象的属性(this):

...
if (this.checked) {
    players.push(this.value);
}
...
Run Code Online (Sandbox Code Playgroud)