【问题标题】:Changing the columns displayed in a table with checkbox使用复选框更改表中显示的列
【发布时间】:2014-10-18 06:49:33
【问题描述】:

我有一个可以显示一组列的表格(实际上是一个网格),用户可以使用复选框列表选择要显示的列。我必须插入一个全选/取消全选按钮。

$('#CheckUncheck').toggle(function(){
    $("#CheckBoxDiv input[type='checkbox']").removeAttr('checked')
    $("#CheckBoxDiv input[type='checkbox']").trigger('click');
    $(this).val('Check All')
},function(){
    $("#CheckBoxDiv input[type='checkbox']").attr('checked', 'checked').trigger('click');
    $(this).val('Uncheck all');        
});

现在,当我第一次单击“取消选中全部”按钮时,这些框不会被取消选中,但之后可以正常工作。为了更好地理解,我附上了一个小提琴。

我做错了什么? 另外,我是否以有效的方式触发了更改功能?

JSFiddleDEMO

【问题讨论】:

  • 你想要这个吗...jsfiddle.net/moslake7020/mxdL1xwn
  • 在你的小提琴中,你已经修复了复选框的选中/取消选中,但如果你注意到,按钮的名称在你第一次单击按钮时不会改变。所以你的修复也像我的原始代码一样结束。
  • 好的,我们会为您带来...更多改进.../。
  • 你能不能也弄清楚点击功能有什么问题?

标签: jquery checkbox onclick


【解决方案1】:

这里是 NEW DEMO LINK 看看它......这是你想要的......但是对于它你必须看看复选框是否默认选中......

我已经改变了你的html,只是在按钮上添加了data-id属性

<div id="ButtonDiv">
  <input type="button" id="CheckUncheck" data-id="uncheck" value="Uncheck All"/>

<div id="CheckBoxDiv">
<input type="checkbox" id="cb1"  value="Cell1" /> Checkbox 1
<input type="checkbox" id="cb2"  value="Cell2" /> Checkbox 2
<input type="checkbox" id="cb3" checked="checked" value="Cell3" /> Checkbox 3
<input type="checkbox" id="cb4" checked="checked" value="Cell4" /> Checkbox 4
</div>

<div>
<table id="table">
    <tr id="row">
        <td id="Cell1">1</td>
        <td id="Cell2">2</td>
        <td id="Cell3">3</td>
        <td id="Cell4">4</td>
    </tr>
</table>
</div>

还有新的javascript

 $(document).ready(function(){ 
alert($("#CheckBoxDiv input[type='checkbox']").length+'========'+$("#CheckBoxDiv input[type='checkbox']:checked").length);

if($("#CheckBoxDiv input[type='checkbox']").length == $("#CheckBoxDiv input[type='checkbox']:checked").length)
{
    $('#CheckUncheck').attr('Value','Uncheck All');
     $('#CheckUncheck').attr('data-id','uncheck');
}
else
{
    $('#CheckUncheck').attr('Value','Check All');
     $('#CheckUncheck').attr('data-id','check');
}

$("#CheckBoxDiv input[type='checkbox']").click(function () {
    var cbValue = $(this).val();
    if ($(this).attr('checked')) {
            $(cbValue).show();
        }
        else {
            $(cbValue).hide();
        }
});

$('#CheckUncheck').click(function(){

   if( $('#CheckUncheck').attr('data-id') == "check")
   {     


    $("#CheckBoxDiv input[type='checkbox']").removeAttr('checked');
    $("#CheckBoxDiv input[type='checkbox']").trigger('click');

    $(this).val('Uncheck All');  
    $(this).attr('data-id','uncheck');



    }
    else
    {           

   $("#CheckBoxDiv input[type='checkbox']").attr('checked','checked').trigger('click');


    $(this).val('Check All');
    $(this).attr('data-id','check');
    }


});


});

它正在工作......检查演示......在给定的链接中

【讨论】:

  • 第一次点击时,按钮的文字不会变为“全选”。
【解决方案2】:

这是DEMO
您正在更改选中的属性,然后触发导致您更改的选中属性恢复的点击事件

 $('#CheckUncheck').toggle(function(){
    $("#CheckBoxDiv input[type='checkbox']").removeAttr('checked')//chk box unchecked
    $("#CheckBoxDiv input[type='checkbox']").trigger('click');//chk box checked
    $(this).val('Check All')
},function(){
    $("#CheckBoxDiv input[type='checkbox']").attr('checked', 'checked').trigger('click');//same here first check by change in attribute then unchecked by triggering click event
    $(this).val('Uncheck all');        
});

试试这个—— 首先触发 click 事件,然后更改 ckecked 值

 $('#CheckUncheck').toggle(function(){
 $("#CheckBoxDiv input[type='checkbox']").trigger('click').removeAttr('checked')            
        $(this).val('Check All')
    },function(){
        $("#CheckBoxDiv input[type='checkbox']").trigger('click').attr('checked', 'checked');
        $(this).val('Uncheck all');        
    });

这是带有固定点击功能的预期结果链接

http://jsfiddle.net/jbaq66ev/17/

【讨论】:

  • 我尝试了您的解决方案。起初它可以工作,但复选框没有响应:jsfiddle.net/jbaq66ev/10
  • 哦,谢谢伙计!你能找到我的点击功能有什么问题吗:(
  • 原作中!
  • 您的代码清除了错误,但点击行为不理想。
  • jsfiddle.net/jbaq66ev/14 这是最终解决方案,请改用更改事件:)
【解决方案3】:

您将取消选中更改为选中。 试试这个代码。我已经用你的代码测试了它。这是你的demo

     $(document).ready(function(){
        $('#CheckUncheck:button').toggle(function(){ 
        $('input:checkbox').removeAttr('checked');
            $(this).val('check all'); 
        },function(){
              $('input:checkbox').attr('checked','checked');
            $(this).val('uncheck all')      
        })
    });

要检查是否选择了值,您可以使用 this 之类的属性。

   $("#CheckBoxDiv input[type='checkbox']").click(function () {
    var cbValue = "#"+$(this).val();
          if ($(this).prop('checked')==true){ 
           $(cbValue).show();
          }else{
           $(cbValue).hide();
          }
});

【讨论】:

  • 在#CheckUncheck 下,我有许多按钮。所以我不认为我可以使用 #CheckUncheck:button 作为选择器。
  • 您只能像在演示小提琴中所做的那样使用#CheckUncheck。我已经更新了链接演示供您查看。
  • 唷,这行得通。你也能看到我的点击功能吗?我认为这更重要。
  • 我看到你已经完全取消了点击功能。我知道它可以在没有点击功能的情况下工作。我想要点击功能并且仍然希望它工作。无点击功能:stackoverflow.com/questions/5229023/…
  • 你点击函数到div是什么意思?你想选中一个复选框并隐藏/显示它的值吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多