2013-06-30 190 views
-2

我在页面上有一个“全选”复选框,它将取消选择并选择下面的复选框。复选框在javascript中选择和取消选择功能

<div class="field"> 
    <div class="SelectAllCheckBox"> 
     <input type="checkbox" id="SelectAllCheckBox" /> 
     <label for="SelectAllCheckBox">Select All</label> 
    </div> 
</div> 

<div id="TargetsPanel" class="panel" style="display: block;"> 
    <div class="body stack-calc"> 
     <table id="TargetsTable" class="tm-list" cellspacing="0"> 
      <colgroup> 
       <col width="20px"> 
       <col width="20%"> 
       <col> 
      </colgroup> 
      <thead> 
       <tr> 
       <th></th> 
       <th> Language </th> 
       <th> Workflow </th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td></td> 
        <td> 
         <span class="LanguageName">Arabic</span> 
         <ul class="Publications"> 
          <li> 
           <img alt="" src="/test/tt.png"> 
           <input type="checkbox" id="tcm:0-235-1" name="tcm:0-235-1" checked="checked">        
           <label for="tcm:0-235-1">Test Arabic</label> 
          </li> 
         </ul> 
        </td> 
        <td><select name="_1041" disabled=""><option value="1650">Test</option></select></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td> 
         <span class="LanguageName">Test Chinese (HongKong)</span> 
         <ul class="Publications"> 
          <li> 
           <img alt="" src="/test/mm.png"> 
           <input type="checkbox" id="tcm:0-368-1" name="tcm:0-368-1" checked="checked">        
           <label for="tcm:0-368-1">Test (Traditional Chinese)</label> 
          </li> 
         </ul> 
        </td> 
        <td><select name="_1116" disabled=""><option value="1650">Test2</option></select></td> 
       </tr> 
       ... 
       ... 
       ...//It goes on for other checkboxes. 
       ... 
       ... 
      </tbody> 
     </table> 
    </div> 
</div> 

现在我想选择和取消选择“SelectAllCheckBox”复选框下方所有复选框的功能。在复选框中没有任何常见操作,除了它们是复选框,并且我希望这些复选框只有其他才会出界。

<input type="checkbox" id="tcm:0-235-1" name="tcm:0-235-1" checked="checked"> 
<input type="checkbox" id="tcm:0-368-1" name="tcm:0-368-1" checked="checked"> 
.... 
.... 
.... 

感谢

编辑:

c.SelectAllCheckBox = $("#SelectAllCheckBox"); //I am initializing the existing checkbox id 

$evt.addEventHandler(c.SelectAllCheckBox, "click", this.getDelegate(this._onSelectAllCheckBoxClick)); //Here I am adding the event listner 

TranslationJob.prototype._onSelectAllCheckBoxClick = function TranslationJob$_onSelectAllCheckBoxClick(headDoc, items) 
{ 
    var p = this.properties; 
    var c = p.controls; 

    //Here I want code which will deselect and select the checkboxes 

}; 

要求:
功能应该工作在主选择所有子作为应选择,一旦主人是取消所有的孩子应该是取消选择,如果任何儿童复选框被取消选择,那么主人应该被取消选择,如果所有的孩子被选中,主人应该被选中automati凯莉

回答

0

纯JavaScript解决方案:)
小提琴:http://jsfiddle.net/6sxxZ/6/

function get_checkboxes() { 
    var cboxes = []; 
    var tbl = document.getElementById('TargetsTable'); 
    var tbody = tbl.getElementsByTagName('tbody')[0]; 
    var trs = tbody.getElementsByTagName('tr'); 
    var cbox; 
    for (var i = 0; i < trs.length; i++) { 
     cboxes.push(cbox = trs[i].getElementsByTagName('input')[0]); 
    } 
    return cboxes; 
} 

var _cboxes = get_checkboxes(); 
for (var i = 0; i < _cboxes.length; i++) { 
    _cboxes[i].onchange = function() { 

     var __cboxes = get_checkboxes(); 
     var all_checked = true; 
     for (var j = 0; j < __cboxes.length; j++) { 

      if (!__cboxes[j].checked) { 
       all_checked = false; 
       break; 
      } 
     } 

     document.getElementById('SelectAllCheckBox').checked = all_checked; 
    } 
}; 

document.getElementById('SelectAllCheckBox').onchange = function() { 
    var cboxes = get_checkboxes(); 
    for (var i = 0; i < cboxes.length; i++) { 
     cboxes[i].checked = this.checked; 
    } 
}; 
+0

好的,谢谢Relfor,如果有人取消选择复选框,那么它应该取消选择主“全选”复选框,并在“this.checked”上给出错误。说TypeError:this.checked是未定义的 –

+0

我增加了功能。当你运行小提琴时,或者当你尝试在你的项目中嵌入代码时,它是否给你错误? –

+0

Relfor,你知道我已经指出,'this.checked;'正在为我工​​作,请建议,如果有人取消选择儿童复选框,那么它应该取消选择主和 –

0

jQuery的解决方案:
编辑:原来的问题接受了jQuery的解决方案
小提琴:http://jsfiddle.net/WF74Y/3/

$('#SelectAllCheckBox').change(function() { 
    $('div#TargetsPanel table#TargetsTable tr input[type="checkbox"]').prop('checked', $(this).prop('checked')); 
}); 
+0

Relfor,我想选择/取消选择所有复选框内的div id“TargetsPanel”>>表ID“TargetsTable”>> tbody >> tr在#SelectAllCheckBox的点击事件 –

+0

抱歉没有看到 –

+0

更新为方式你指定,检查出来 –

2

试试这个:

$(document).on('click', '#SelectAllCheckBox', function(){ 
    $('.Publications input[type=checkbox]').toggle(this.checked); 
}); 

它会检查它有class=Publications所有复选框一旦你点击全选checkox &也取消选中他们,如果你删除检查。

此外,你可以自定义$('.Publications input[type=checkbox]')选择你的意愿来改变检查什么的复选框/选中

[编辑]

纯JavaScript解决方案,请参阅my other answer

+0

作为一个方面说明,你可以删除'this.checked'部分反转选择(取消选择全部选中并全选未选中) – casraf

+0

我的应用程序页面出现错误“TypeError:$(...)。toggle不是函数”是否有任何其他方法可以实现此目的 –

+0

^^^您可以向我展示[jsfiddle]上的错误和代码(http:// jsfiddle.net/)?所以我可以帮你解决这个错误。谢谢 – CuriousMind

0

纯JavaScript的解决方案

var selectAll = document.querySelector('#SelectAllCheckBox'); 

function checkUncheck() { 
    var checkboxes = document.querySelectorAll('.Publications input[type=checkbox]'); 
    for (var checkbox in checkboxes) { 
     if (!checkboxes.hasOwnProperty(checkbox)) continue; 
     if (selectAll.checked) { 
      checkboxes[checkbox].checked = true; 
     } else { 
      checkboxes[checkbox].checked = false; 
     } 
    } 
} 

function uncheck(){ 
    selectAll.checked = false; 
} 

现在,我们需要这两个函数添加到事件。我选择使用内联事件&对其做这样:

  1. 添加onclick回调调用checkUncheck()#SelectAllCheckBox

  2. 添加onclick回调调用uncheck所有其他复选框

你可以使用unobtrusive javascript &添加EventHandlers来做同样的事情。

这里的jsfiddle显示它在工作:

希望它可以帮助

PS:仅供参考,我已经使用querySelector/querySelectorAll API导致更清洁节点&很好支持所有现代浏览器。它只是在旧版浏览器的IE6/IE7上不起作用。

+0

大问题Gaurish,孩子复选框是动态生成的,所以如何跟踪它们?当页面加载时,它们都会呈现 –

+0

您如何跟踪它们?首先是jquery,然后是纯js&现在是动态的。你的问题在每个答案上都有变化你究竟想要做什么?问正确的问题会得到正确的答案;) – CuriousMind

+0

Gaurish,我知道的问题几乎没有改变,但我认为这些都应该自动处理,抱歉所有这些混淆 –

相关问题