2

HTML:

<input type="checkbox" />
<span id="test">Click here</span>

JS:

$("#test").click(function () {
    if ($(":checkbox").attr("checked") == undefined) {
        $(":checkbox").attr("checked", "checked")
    } else {
        $(":checkbox").removeAttr("checked")
    }
});

小提琴:链接 - v1.8.3

这工作得很好,但是,如果我将 jquery 版本更改为 1.9.1,复选框将不再被选中。问题是什么?

小提琴:链接 - v.1.9.1

虽然inspect element显示复选框正在切换属性,但如果我$(":checkbox").is(":checked")在控制台中执行操作,我会得到false输出

4

3 回答 3

5

checked是一个属性,你应该使用prop方法,当一个布尔属性像disabledorchecked被设置为一个元素时,该值被映射到元素的相关 DOM 属性(浏览器这样做attr并且removeAttr方法不会改变元素的属性,从 jQuery 1.6 开始,用于修改属性,prop应该使用 method 而不是attr.

$("#test").click(function () {
    $('input[type=checkbox]').prop('checked', function(i, state){
        return !state;
    });
});

http://jsfiddle.net/3rQvj/

于 2013-04-07T09:15:05.233 回答
1

我也遇到了同样的问题,你应该参考下面的链接以获得正确的想法 http://jquery.com/upgrade-guide/1.9/#attr-versus-prop- 希望它能解决你的问题:)

于 2013-04-08T06:20:55.490 回答
0

为什么不直接使用标签?这样它就可以在没有 javascript 的情况下工作。

<input type="checkbox" id="test" /><label for="test">Click me</label>
于 2013-04-07T09:19:24.550 回答