【问题标题】:jquery check and uncheck all with actionjquery检查并取消选中所有操作
【发布时间】:2012-09-10 10:13:27
【问题描述】:

当用户点击它时,我有更多的复选框输入调用函数“boxclick”:

<input id="1box" type="checkbox" name="selected[]" onclick="boxclick(this,'1')">
<input id="2box" type="checkbox" name="selected[]" onclick="boxclick(this,'2')">
<input id="3box" type="checkbox" name="selected[]" onclick="boxclick(this,'3')">
<input id="4box" type="checkbox" name="selected[]" onclick="boxclick(this,'4')">

为了检查/取消选中所有我使用简单的 jquery 脚本:

<input type="checkbox" onclick="$('input[name*=\'selected\']').attr('checked', this.checked);" checked="checked">

我的问题是当我选中/取消选中所有功能“boxclick”时没有运行。

  // == a checkbox has been clicked ==
  function boxclick(box,category) {
    if (box.checked) {
      show(category);
    } else {
      hide(category);
    }
  }

【问题讨论】:

  • 你能告诉我简短的...?我想你想检查所有是一个复选框被选中...??对吧。?
  • 你能告诉我们boxclick这个函数是什么样子的吗?
  • 我已经用 boxclick 代码更新了我的问题

标签: javascript jquery html unchecked


【解决方案1】:

我认为你可以做到:

HTML

<input id="1box" type="checkbox" name="selected[]">
<input id="2box" type="checkbox" name="selected[]">
<input id="3box" type="checkbox" name="selected[]">
<input id="4box" type="checkbox" name="selected[]">

jQuery

如果要选中/取消选中所有checkbox

var checkboxes = $('input[type=checkbox][name^=selected]');
checkboxes.on('click', function() {
   checkboxes.prop('checked', this.checked);
});

如果你想一次选择任何一个:

var checkboxes = $('input[type=checkbox][name^=selected]');
checkboxes.on('click', function() {
   checkboxes.prop('checked', false);
   this.checked = !this.checked;
});​

DEMO

【讨论】:

  • 当您单击其中任何一个复选框时,它会检查所有复选框,并且永远不允许您取消选中它们,这似乎都不是他们想要的功能。
【解决方案2】:

将复选框的属性设置为选中不会自动为您伪造点击事件!因为您将这些 boxclick 函数调用放在一些“onclick”处理程序中,所以您必须触发一个虚假的 click 事件,以便您的 javascript 认为它单击了所有框。要触发虚假点击事件,请使用 $('#whatever').trigger('click'),例如:

$('input[name*=\'selected\']').trigger('click');

如果你想选中/取消选中所有功能,你必须说“好的,主复选框,请在我被选中或取消选中时听取。发生这种情况时,请设置我的从属盒的选中属性(页面上的其他框) 以匹配 master的当前选中的属性。"像这样:

function checkAllorUncheckAll(event){

    var chiefCheckbx = event.currentTarget;
    var myBoxes = $('input[name*=\'selected\']'); 

    myBoxes.prop( "checked", $(chiefCheckbx).prop("checked") ).trigger('click');

}

$('#masterCheckBox').on('change',checkAllorUncheckAll);

【讨论】:

  • 求解答,我的复选框默认都是勾选的,怎么解决?
  • 你想用我看到的那个主复选框取消选中/选中所有,所以请看我重新设计的答案:)
【解决方案3】:

我猜

$('input[name*=\'selected\']').attr('checked', this.checked).trigger('click');

应该在这里解决问题

【讨论】:

  • 如果 OP 的 boxclick 函数已经单独检查每个框,则 attr('checked', this.checked) 链不应该存在。 OP 没有发布该 boxclick 功能代码,因此我们目前无法确定,但如果 OP 想要,如果 OP 的 boxClick 功能不选中/取消选中/,则执行 .attr('checked', this.checked) 绝对有效已经切换了各个框(尽管如果它是一个切换,OP 将需要注意 - boxClick 代码可能与 OP 真正尝试做的冲突!
  • @sajawikio 他说功能 boxClick 在将 attr 设置为选中时没有被调用。这不会是因为它从未真正被点击过。所以我告诉他在将 attr 设置为选中后触发点击事件或未选中。
【解决方案4】:

演示 http://jsfiddle.net/H37cb/

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js" /></script>

<script type="text/javascript">
$(document).ready(function(){

$('input[name="all"],input[name="title"]').bind('click', function(){
var status = $(this).is(':checked');
$('input[type="checkbox"]', $(this).parent('li')).attr('checked', status);
});

});
</script>




<div id="wrapper">
 <li style="margin-top: 20px">
  <input type="checkbox" name="all" id="all" /> <label for='all'>All</label>
  <ul>
   <li><input type="checkbox" name="title" id="title_1" /> <label for="title_1"><strong>Title 01</strong></label>
    <ul>
     <li><input type="checkbox" name="selected[]" id="box_1" value="1" /> <label for="box_1">Sub Title 01</label></li>
     <li><input type="checkbox" name="selected[]" id="box_2" value="2" /> <label for="box_2">Sub Title 02</label></li>
     <li><input type="checkbox" name="selected[]" id="box_3" value="3" /> <label for="box_3">Sub Title 03</label></li>
     <li><input type="checkbox" name="selected[]" id="box_4" value="4" /> <label for="box_4">Sub Title 04</label></li>
    </ul>
   </li>
  </ul>
  <ul>
   <li><input type="checkbox" name="title" id="title_2" /> <label for="title_2"><strong>Title 02</strong></label>
    <ul>
     <li><input type="checkbox" name="selected[]" id="box_5" value="5" /> <label for="box_5">Sub Title 05</label></li>
     <li><input type="checkbox" name="selected[]" id="box_6" value="6" /> <label for="box_6">Sub Title 06</label></li>
     <li><input type="checkbox" name="selected[]" id="box_7" value="7" /> <label for="box_7">Sub Title 07</label></li>
    </ul>
   </li>
  </ul>
 </li>
</div>

【讨论】:

  • 如果您解释如何解决问题,此答案可能对 OP 和其他稍后看到它的人更有益。即使代码准确,我们通常更喜欢详细的解释而不是代码块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多