function checkBoxChecked(softid) {
var formObject = window.document.formobj;
var length = formObject.all.length;
if(formObject.softname_check.checked) {
for(i=0;i<length;i++) {
if(formObject.all(i).type == "checkbox") {
formObject.all(i).checked = true ;
}
}
}
else {
for(i=0;i<length;i++) {
if(formObject.all(i).type == "checkbox") {
formObject.all(i).checked = false ;
}
}
}
}
这是一个 点击checkbox全选全消的方法用于主checkbox
softid 是传入的副checkbox的id
我现在有几组checkbox分别如下:1 2 3 4 5 6
11 12 13 14 15 16
22 33 44 55 66 77这些都是 动态生成的 有何方法可以点击 1(主checkbox) 后 2 3 4 5 6 的checkbox全选 而 后面不动 、
再点击 11(主checkbox) 则 12 13 14 15 18的 checkbox全选 其他不动 再点击主checkbox 则取消, 后面
再动态生成 则同样。我已经生成了 副checkbox的id 但是 我不知道该如何在js中循环取得 这些 动态id 请支个招 谢谢
这是 php代码 大大赏脸看个 万分感谢
<div style="width:570px;height:150px;overflow:auto;">
{foreach key=k item=i from=$F.Checkbox}
{if $i == 'over'}
<br/>
{elseif mb_substr($k,0,6) == 'script'}
{foreach key=f item=s from=$i}
<input type="checkbox" id='softname_check' name="organizationid_soft_check[]" onclick="checkBoxChecked('organizationid{$f|escape}');" value={$f|escape}
{foreach key=j item=h from=$F.B.organizationid_soft_check}{if $f == $h}checked{/if}{/foreach}>
<span class="txt12">{$s|escape}</span>
{/foreach}
{else}
{foreach key=l item=v from=$i}
<input type="checkbox" id="organizationid{$k|escape}" name="organizationid_o_check[]" value={$l|escape}
{foreach key=j item=h from=$F.B.organizationid_o_check}{if $l == $h}checked{/if}{/foreach}>
<span class="txt12">{$v|escape}</span>
{/foreach}
{/if}
{/foreach}
</div>
var formObject = window.document.formobj;
var length = formObject.all.length;
if(formObject.softname_check.checked) {
for(i=0;i<length;i++) {
if(formObject.all(i).type == "checkbox") {
formObject.all(i).checked = true ;
}
}
}
else {
for(i=0;i<length;i++) {
if(formObject.all(i).type == "checkbox") {
formObject.all(i).checked = false ;
}
}
}
}
这是一个 点击checkbox全选全消的方法用于主checkbox
softid 是传入的副checkbox的id
我现在有几组checkbox分别如下:1 2 3 4 5 6
11 12 13 14 15 16
22 33 44 55 66 77这些都是 动态生成的 有何方法可以点击 1(主checkbox) 后 2 3 4 5 6 的checkbox全选 而 后面不动 、
再点击 11(主checkbox) 则 12 13 14 15 18的 checkbox全选 其他不动 再点击主checkbox 则取消, 后面
再动态生成 则同样。我已经生成了 副checkbox的id 但是 我不知道该如何在js中循环取得 这些 动态id 请支个招 谢谢
这是 php代码 大大赏脸看个 万分感谢
<div style="width:570px;height:150px;overflow:auto;">
{foreach key=k item=i from=$F.Checkbox}
{if $i == 'over'}
<br/>
{elseif mb_substr($k,0,6) == 'script'}
{foreach key=f item=s from=$i}
<input type="checkbox" id='softname_check' name="organizationid_soft_check[]" onclick="checkBoxChecked('organizationid{$f|escape}');" value={$f|escape}
{foreach key=j item=h from=$F.B.organizationid_soft_check}{if $f == $h}checked{/if}{/foreach}>
<span class="txt12">{$s|escape}</span>
{/foreach}
{else}
{foreach key=l item=v from=$i}
<input type="checkbox" id="organizationid{$k|escape}" name="organizationid_o_check[]" value={$l|escape}
{foreach key=j item=h from=$F.B.organizationid_o_check}{if $l == $h}checked{/if}{/foreach}>
<span class="txt12">{$v|escape}</span>
{/foreach}
{/if}
{/foreach}
</div>
有几种做法.
一种:
这样布局
主checkbox <div id='soncheckbox_主checkboxid'>son checkbox组</div>
点主checkbox以后,拼凑div id,然后找div的子节点,选中或者取消.
另外一种
主checkbox ,在其子checkbox name或者id属性中,添加主checkbox的id,这样通过字符串操作,可以分清父子归属,来决定选中或者取消.具体实现自己做吧.
另外一种
主checkbox ,在其子checkbox name或者id属性中,添加主checkbox的id,这样通过字符串操作,可以分清父子归属,来决定选中或者取消.但是 如何 在主checkbox的js中取得子check的id值哪? 需要循环取得的吧 能告知下吗
for(;;)
{
if($i > 3) break;
$html[] = <<<h
<input type="checkbox" onclick="chks('name_{$i}[]',this.checked)"/>
h;
for($j=0;$j<6;$j++)
{
$html[] = <<<s
<input type="checkbox" name="name_{$i}[]"/>
s;
}
$html[] = "<br/>";
$i++;
}
echo implode('',$html);
echo <<<js
<script type='text/javascript'>
var chks = function(name,chked){
var o = document.getElementsByName(name);
for(var i=0,j=o.length;i<j;i++){
o[i].checked = chked;
}
}
</script>
js;
不要把你那些带smarty语法以及无头无尾的变量的tpl文件贴出来,大家不好帮你测试的.
js也可以取name的值啊, 你想怎么取 ?
var formObject = window.document.formobj;
var length = document.getElementsByName("organizationid_o_check[]").length;
if(document.getElementById(obj.id).checked==true) {
for(i=1;i<length+1;i++) {
document.getElementById(obj.id+"_"+i).checked=true;
}
}
else {
for(i=1;i<length+1;i++) {
document.getElementById(obj.id+"_"+i).checked=false; ;
}
}
}谢谢大甲虫的帮忙 我改了 因为我的name是个数组 所有使用方法比较局限,为的是提交时可以取得所有的checkbox从而放入数据库,现在还有一个问题 就是 如果 出现多个checkbox 取得的length 数超过了getElementById(obj.id+"_"+i) 这个i的上限 js就会报错 也就是说 如果 只有一条动态checkbox没问题
1 2 3 4 5 (此类情况ok)
1 2 3 4 5
11 22 33 44 55 (此类情况js出错)虽然点击1 后 能全选 点击 11后11的子box也能全选就是js报错好像是 超过局限了 不知道能不能 支个招
不过建议你自己捋清楚生成的checkbox节点个数。
取得的长度 就不是 一组 而是根据动态checkbox组的整组长度了 所以document.getElementById(obj.id+"_"+i).checked=true; 的i得长度超过该组子box的数量js就会报错 由于是动态生成的,js处理起来比较麻烦,
要考虑0个/1个/1个以上的3种情况。
function aGetOrganizationCheckBox($con,&$vo,$aRequest=array()){
//$_REQUEST["organizationid_o_select"] :生成主checkbox的条件取得
if($_REQUEST["organizationid_o_select"]) {
$vo->organizationid_o_select = $_REQUEST["organizationid_o_select"];
foreach ($vo->organizationid_o_select as $k=>$v) {//有多少主checkbox在这里确定了
if ($vo->getNewOrgType()) {//两种情况 不用在意
$orglist = $this->oOrganizationBL->aGetOrganizationSelect($con,$v);//循环后取得主box的数据
foreach ($orglist as $k_id=>$v_list) {
$aRs = $this->oOrganizationBL->aGetOrganizationInfo($con, $k_id);
$regist_staff = array_keys($this->userdao->getUserSelectByOrgid($con,$k_id));//如果子box没有东西主box也不用显示了
if($regist_staff) {
$orgcheckbox['script'.$k_id][$aRs->orgid] = $aRs->orgname;//主box赋值给页面元素
foreach ($regist_staff as $m=>$userid) {
$userinfo = $this->userdao->getUserInfo($con,$userid);
$orgcheckbox[$aRs->orgid][$userid] = $userinfo->familyname.$userinfo->firstname;//子box赋值给页面
}
$orgcheckbox["over".$k_id] = 'over';//换行用
}
}
}
else {
// 另一种情况 不过不是循环 进本和上面循环是一样 不用在意
$aRs = $this->oOrganizationBL->aGetOrganizationInfo($con, $v);
$regist_staff = array_keys($this->userdao->getUserSelectByOrgid($con,$v));
if($regist_staff) {
$orgcheckbox['script'.$aRs->orgid][$aRs->orgid] = $aRs->orgname;
foreach ($regist_staff as $m=>$userid) {
$userinfo = $this->userdao->getUserInfo($con,$userid);
$orgcheckbox[$aRs->orgid][$userid] = $userinfo->familyname.$userinfo->firstname;
}
$orgcheckbox[$k] = 'over';
}
}
}
return $orgcheckbox;
}
}
配合一楼的smarty 代码 就这样出来了 return $orgcheckbox的数组类型是array
'script59' =>//script是用来判断是否主box
array
59 => string '张尉组' (length=9)
59 => //主box key的子box
array
36 => string '张尉' (length=6)
46 => string '朱贞财' (length=9)
'over59' => string 'over' (length=4)
'script60' =>
array
60 => string '朱雄组' (length=9)
60 =>
array
38 => string '朱雄' (length=6)
40 => string '夏远鹏' (length=9)
44 => string '牛兵伟' (length=9)
45 => string '贾超超' (length=9)
'over60' => string 'over' (length=4)
'script61' =>
array
61 => string '顾云峰组' (length=12)
61 =>
array
35 => string '顾云峰' (length=9)
43 => string '刘夏' (length=6)
42 => string '成弘毅' (length=9)
49 => string '高明' (length=6)
'over61' => string 'over' (length=4)
'script62' =>
array
62 => string '于景泉组' (length=12)
62 =>
array
39 => string '于景泉' (length=9)
51 => string '姜松林' (length=9)
41 => string '李芝平' (length=9)
'over62' => string 'over' (length=4)
关键在于你的操作是用js在浏览器中完成的。所以只要在浏览器中“查看源代码”得到的html文档就可以了