2017-02-08 17 views
3

アカウント設定チェックボックスをオンにすると、すべての子の入力タグが完全にチェックされます。しかし子供のチェックを外した場合を削除するを削除すると、アカウント設定のチェックが外されます。jqueryを使用して親の親のチェックボックスをオンまたはオフにする

私は2つの AS一つ AS がチェックされているときアカウント設定をオフにしたくありません。

これを解決する方法を教えてください。 Jsfiidle

ここ

は、以下の私のコードです。

HTML

<ul class="tree" id="tree"> 
    <li> 
     <input type="checkbox" name="account_settings" value="yes">Account Settings 
     <!-- AND SHOULD CHECK HERE --> 
     <ul> 
      <li> 
       <input type="checkbox" name="one" value="one">AS One</li> 
      <li> 
       <input type="checkbox" name="two" value="two">AS Two</li> 
      <li> 
       <input type="checkbox" name="user_roles" value="user_roles">Users &amp; Roles 
       <!-- SHOULD CHECK HERE --> 
       <ul> 
        <li> 
         <input type="checkbox" name="user_role" value="add">Add</li> 
        <li> 
         <input type="checkbox" name="user_role" value="delete">Delete</li> 
        <!-- CHECK HERE --> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <input type="checkbox" name="rl_module" value="yes">RL Module</li> 
    <li> 
     <input type="checkbox" name="rl_module" value="yes">Accounting 
     <ul> 
      <li> 
       <input type="checkbox" name="vat" value="yes">VAT</li> 
      <li> 
       <input type="checkbox" name="bank_account" value="yes">Banking 
       <ul> 
        <li> 
         <input type="checkbox" name="view" value="yes">View</li> 
        <li> 
         <input type="checkbox" name="crud" value="yes">CRUD</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

JS

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 


$('input[type=checkbox]').click(function() { 
    $(this).parent().find('li input[type=checkbox]').prop('checked', $(this).is(':checked')); 
    var sibs = false; 
    $(this).closest('ul').children('li').each(function() { 
      if($('input[type=checkbox]', this).is(':checked')) sibs=true; 
    }) 
    $(this).parents('ul').prev().prop('checked', sibs); 
}); 
+0

を試してみてください。チェックボックスを区別するためにIDまたは名前を使用してください。 –

+0

はい、私の側で動的でなければなりません。だから私はタグを使用 – Siddhu

+0

私は私の答えを更新しました。それを見てください。 –

答えて

2

はあなたが唯一のhtmlタグを使用する必要があり、この

<ul class="tree" id="tree"> 
    <li> 
     <input type="checkbox" name="account_settings" value="yes">Account Settings 
     <ul> 
      <li> 
       <input class="account_settings" type="checkbox" name="one" value="one">AS One 
      </li> 
      <li> 
       <input class="account_settings" type="checkbox" name="two" value="two">AS Two 
      </li> 
      <li> 
       <input class="account_settings" type="checkbox" name="user_roles" value="user_roles">Users &amp; Roles 
       <ul> 
        <li> 
         <input class="account_settings user_roles" type="checkbox" name="user_role" value="add">Add 
        </li> 
        <li> 
         <input class="account_settings user_roles" type="checkbox" name="user_role" value="delete">Delete 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

$('input[type=checkbox]').click(function() { 
    if($(this).prop('checked')) 
    { 
     $('.'+$(this).attr('name')).prop('checked',true); 
    } 
    else 
    { 
     $('.'+$(this).attr('name')).prop('checked',false); 
    } 
    findparent(this); 
}); 
}); 

function findparent(elem) 
{ 
    var flag = 1; 
    var fcount = 0; 
    var count = 0; 
    $(elem).parent().parent().find('li input').each(function (index) { 
     fcount = fcount +1; 
     if($(this).prop('checked') == false) 
      count = count + 1; 
    }); 

    if(count == fcount) 
     flag = 0; 

    if(flag == 0) 
     $(elem).parent().parent().prev().prop('checked',false); 
    else 
     $(elem).parent().parent().prev().prop('checked',true); 
} 
+0

それは正常に動作しています。ユーザーと役割の追加と削除のチェックを外すと、まだチェックされています。親のユーザーとロールのチェックを外すには –

+0

コードをもう一度確認してください。私はそれを更新しました。親チェックボックスと兄弟チェックボックスをチェックする別の関数を追加しました。 –

+0

パーフェクト。しかし、私の場合は、ネストされたチェックボックスの回数を繰り返す必要があります。一度このURLを確認してくださいhttps://jsfiddle.net/siddhuphp/e32zcp5k/2/ –

関連する問題