回答編集履歴

1 追記

yambejp

yambejp score 45517

2017/02/08 17:29  投稿

adminからmanagerやuser、manegerからuserに移ったときの
条件の競合がありますね
あとえばadminで全チェックしたあとにuserに変えたら
userは1つしか選べないという条件にあいません。
authorityを変化する度にcheckboxをクリアするのか、そのまま
でいいのか、仕様詰めたほうがいいですね
とりあえずそのままにするバージョンは以下
```javascript
$(function(){
 $('#authority select[name=authority],#shop input[type=checkbox]').on('change',function(){
   var v=$('#authority select[name=authority]').val();
   var l=$('#shop input[type=checkbox]:checked').length;
   switch(v){
   case 'user':
     $('#shop input[type=checkbox]:not(:checked)').prop('disabled',l>=1).prop('readonly',false);
     break;
   case 'manager':
     $('#shop input[type=checkbox]:not(:checked)').prop('disabled',false).prop('readonly',false);
     break;
   case 'admin':
     $('#shop input[type=checkbox]:not(:checked)').prop('disabled',false).prop('checked',true).prop('readonly',true);
     break;
   }
   });
});
```  
#追記  
クリアするバージョンは複雑な条件設定もできますが  
とりあえずauthorityがかわったら全部チェックはずしていいなら以下  
```javascript  
$(function(){  
 $('#authority select[name=authority],#shop input[type=checkbox]').on('change',function(e){  
   var flg=e.target.name=='authority';  
   if(flg) $('#shop input[type=checkbox]').prop('checked',false);  
   var v=$('#authority select[name=authority]').val();  
   var l=$('#shop input[type=checkbox]:checked').length;  
   switch(v){  
   case 'user':  
     $('#shop input[type=checkbox]:not(:checked)').prop('disabled',l>=1).prop('readonly',false);  
     break;  
   case 'manager':  
     $('#shop input[type=checkbox]:not(:checked)').prop('disabled',false).prop('readonly',false);  
     break;  
   case 'admin':  
     $('#shop input[type=checkbox]:not(:checked)').prop('disabled',false).prop('checked',true).prop('readonly',true);  
     break;  
   }  
   });  
});  
 
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る