Jquery复选框切换不起作用

时间:2013-09-26 02:24:41

标签: javascript php jquery html checkbox

在我的html页面中,我想动态插入复选框,我希望在顶部有一个master复选框,所以如果选中它,则会检查所有动态创建的复选框,如果未选中,则所有动态复选变得不受控制。我有这段代码:

<script type="text/javascript">
    $(function() {
        $("#selectAll").click(function() {
            var checked = $(this).prop('checked');
            $(".profilebox").attr("checked", checked);
        });
    });
</script> 

主复选框

<input id="selectAll" type="checkbox" name="selectall" value="All">

其他复选框:(使用此php代码插入循环中)

<input type='checkbox' class='profilebox' name='select' value='{$member_id}'>

然而它运作不正常。如果我点击主人,那么他们都会被检查。如果我再次点击它,那么所有都取消选中,如果我再次点击它,它们仍然不受控制。

有谁知道这个问题?

由于

3 个答案:

答案 0 :(得分:6)

使用 prop instead of attr ,保证元素的设置属性比设置元素属性有效。较旧的jquery verison没有prop,attr用于执行两者的工作,后来的prop被引入并且用于设置这些属性 prop 是最好的。

$(function() {
        $("#selectAll").click(function() {
            $(".profilebox").prop("checked", this.checked);
        });
    });

答案 1 :(得分:1)

需要使用.prop()来设置已检查的属性,而不是.attr()

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

例如:

$(function () {
    //cache the selector result
    var $profileboxes = $(".profilebox");
    $("#selectAll").click(function () {
        $profileboxes.attr("checked", this.checked);
    });
});

阅读:Attributes vs. Properties

答案 2 :(得分:1)

使用.prop()

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

现在您的代码变为

$(function () {
    $("#selectAll").click(function () {
        $(".profilebox").prop("checked", this.checked);
    });
});
  

$(elem).prop(&#34; checked&#34;)true(布尔值)将随复选框一起更改   状态

     

$(elem).attr(&#34;已检查&#34;)(1.6)&#34;已检查&#34; (字符串)的初始状态   复选框;不会改变$(elem).attr(&#34;已检查&#34;)

     

(1.6.1+)&#34;检查&#34; (字符串)将随复选框状态

而变化      

$(elem).attr(&#34; checked&#34;)(pre-1.6)true(布尔值)更改为   复选框状态