2009-08-26 103 views
1

我有一个带有“全选”按钮和一堆复选框的窗体。我想让它在用户点击“全选”按钮时选中所有复选框。当用户点击一个按钮时,你如何选择所有复选框

在jQuery中有没有优雅的方式来做到这一点?

编辑#2:我已经将问题隔离到此代码; style =“display:none;”。如果我删除此代码,它工作正常。有任何想法吗?

编辑:下面的答案在我的测试表单中工作,但在这种情况下的按钮是在一个div内,只显示为simpledialog.show()的一部分的窗体内。在这种情况下,由于某种原因,当我按一下按钮我没有看到任何事情发生:

的javascript:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#sdHc3').simpleDialog({ 
     showCloseLabel: false, 
     open: function() { 
      $('#checkboxStatus').html(''); 
     }, 
     close: function() { 
      var c = []; 
      $('#checkboxForm :checkbox:checked').each(function() { 
       c.push($(this).val()); 
      }); 
      $('#checkboxStatus').html('&nbsp;&nbsp;Checked <b>' + c.join(', ') + '</b>.').show(); 
     } 
    }); 

}); 

<script type="text/javascript"> 
$(function() { 
$('#selectAll').click(function() { 
     var select_all = (this.value === 'Select All'); 
     $(':checkbox').attr('checked', select_all); 
     this.value = (select_all) ? 'Deselect All' : 'Select All'; 
    }); 
}); 

体:

<div style="display: none;" class="scrollableDiv" id="simpleDialog3"> 
    <h3>DEMO3</h3> 
    <form id="checkboxForm"> 
    <input type="button" id="selectAll" value="TT" /> 
    <input type="checkbox" class="chckbx" value="1" /><br /> 
    <input type="checkbox" class="chckbx" value="1" /><br /> 
    </form> 
    <p> 
     <a href="#" class="close">Close</a></p> 
</div> 

任何想法wh在这种情况下它不起作用?

回答

6
$(function(){ 
    $('#myButton').click(function(){ 
     var select_all = (this.value === 'Select All'); 
     $('input:checkbox').attr('checked', select_all); 
     this.value = (select_all) ? 'Deselect All' : 'Select All';   
    }); 
}); 

尝试在对话框实例化之前放置此代码。

看起来你可能想切换到jQuery UI Dialog

+0

你把这个放在哪里? – leora 2009-08-26 01:56:39

+0

新的例子应该更容易处理。 – ChaosPandion 2009-08-26 02:02:57

+0

我会把$('input [type = checkbox'])选择器放在this.form上下文中。我也会使用一个标志而不是this.value来检查是否全部被检查。 (另外,如果一个复选框没有被选中,文本不会被改变,等等) – strager 2009-08-26 02:06:43

2

有点击将选择页面上的所有复选框,当你的按钮调用这个:

jQuery("input:checkbox").attr('checked','checked'); 

可以更改选择器(“输入:勾选”),以提供更好的上下文(以及可能加速它的执行作为孔)

+0

后代更新:从jQuery 1.6开始,应该通过调用'.prop('checked',true)'而不是'.attr('checked','checked')'来标记复选框和单选按钮。 – Blazemonger 2012-05-24 14:10:49

0

只是给所有的复选框的一类,并且附上这个jQuery的按钮:

$(document).ready(function() { 
    $('#myButton').click(function() { 
    $('.checkbox').attr('checked','checked'); 
    }); 
} 

假设您的按钮具有ID =“myButton的”和你的复选框有类=“复选框”。

+0

而不是“.checkbox”(将“复选框”指定为所有应该选择的输入的类),您可以使用“输入[type = checkbox]” – jeef3 2009-08-26 02:02:18

+0

'input:checkbox'更整洁,但仍可能导致不需要的复选框被打勾,取决于页面上的其他元素。 – nickf 2009-08-26 03:50:24

1

因此,如果您选择 - 所有按钮有一个ID选择,所有你说:

$('#select-all').click(function(){ 
    $('input:checkbox').attr('checked', 'checked'); 
); 
0

在我想相同的功能情况下,它通常是与复选框向下行的表旁边。在这种情况下,您可以包含此代码段,然后每当标题单元格中出现复选框时,下方列中的所有相关复选框将根据其值打开/关闭。

假设HTML这样的:

<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" /></th> 
      <th>...</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox" name="row[0]" /></td> 
      <td>...</td> 
     </tr> 
     ... 
    </tbody> 
</table> 

这里是jQuery的:

$('th input:checkbox').click(function() { 
    var $this = $(this), 
     colNum = $this.closest('th').prevAll('th').length, 
     checked = $this.attr('checked') 
    ; 
    $this 
     .closest('table') 
     .find('tbody > tr') 
     .each(function() { 
      $(this) 
       .children("td") 
       .eq(colNum) 
       .find("input:checkbox") 
       .attr('checked', checked) 
      ; 
     }) 
    ; 
}); 

它不需要任何额外的ID或类或任何东西,可连续工作复选框的多列,这是不错。这里有一个演示页面:http://jsbin.com/eqeno

+0

如果这里面的div你的代码似乎不工作。我已经在这里举了一个例子:http://jsbin.com/oyuha – leora 2009-08-26 04:34:31

+0

这将与你正在使用的另一个插件有关 - 使用“live()”事件而不是'click()'可能会解决那。 – nickf 2009-08-26 05:02:59

+0

什么是live()事件。我尝试了它,它似乎没有做任何事情 – leora 2009-08-26 15:09:55

相关问题