【问题标题】:How to check a checkbox (like it was checked manually)如何检查复选框(就像手动检查一样)
【发布时间】:2014-06-10 12:08:43
【问题描述】:

我有一个复选框列表(具有checkbox 类)。不同的任务分配给不同的复选框。单击一个复选框执行某些操作,单击另一个复选框执行其他操作。

现在我想制作一个复选框,将所有复选框(类checkbox)标记为已选中。 所以我创建了一个新的复选框并使用以下代码标记所有其他复选框

$(".checkbox").prop('checked', true);

它确实标记了我所有的复选框,但问题是它没有启动与这些复选框相关的事件和功能。

怎么做?

这是完整的代码

$("#check_all").change(function(){

    //If it was checked
    if($(this).prop('checked') == true){
        $(".checkbox").prop('checked', true);           
    }

    //If it was unchecked
    else {
        $(".checkbox").prop('checked', false);
    }
});

【问题讨论】:

  • 试试 $(".list").trigger("change");
  • @EliasVanOotegem 嗯?那有什么意义呢?
  • @AnoopJoshi 它检查/取消选中复选框,但没有引发任何事件
  • 谁能解释为什么有3张反对票?我没有提供活动细节,因为它们很多。 AJAX、排序、排序等

标签: javascript jquery checkbox


【解决方案1】:

一个简单的方法来做你需要做的事情是这样的:

$('#checkAll').on('click', function()
{
    var all;
    if (this.checked)
        all = $('.checkbox').not(':checked');
    else
        all = $('.checkbox:checked');
    all.prop('checked',this.checked);
});

它有效,如您所见on this fiddle

它的工作原理很简单:

this.checked 告诉我 "check all" 元素的检查状态是什么。如果选中,则其他未选中的复选框应更改状态。如果this.checked 为假,我必须取消选中所有选中的复选框。
这意味着我必须使用 2 种不同的选择方法:$('.checkbox:checked') 给我所有选中的元素,而$('.checkbox').not(':checked') 给我相反的选择。

我通过简单地将主控件 ($('#checkAll')) 元素的检查状态传递给 $.prop 方法来更新所选元素:

【讨论】:

    【解决方案2】:

    可以触发click事件:

    $("#check_all").change(function(){
        $(".checkbox")
           .prop('checked', !$(this).prop('checked'))
           .trigger('click');
    });
    

    JSFiddle

    【讨论】:

    • $(this).prop('checked')this.checked 的冗余版本。
    • 如果$('#check_all') 被错误地赋予.checkbox 类怎么办,或者如果其他一些代码将事件监听器绑定到点击事件到任何.checkbox 元素怎么办?为什么还要点击这些元素?
    • @EliasVanOotegem 根据我的个人经验,当我更改复选框的状态时,我想触发与单击它完全相同的事件。否则您必须手动触发特定事件(我对相关事件一无所知)
    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多