0

グリッドがグループ化されています。グリッドはグループの積を示しています。したがって、構造にはグループとその子があります。同じように、私はいくつかの他のグループと私が下にあるようにバインドしている子を持っています。私は親のクリックでサブリスト全体をチェックし、チェックを外したいと思います。動的idsとjqueryを使用したクラスのチェックボックスをオンまたはオフにします。

CSHTML 
@{ 
    if (Model.List.Count() > 0) 
    { 
    <table> 
     <tr> 
       <input type="checkbox" class="[email protected](obj.GroupId)" name="@obj.GroupId" onclick="checkUncheckAll(this.class)" /> 
      <td>Name</td> 
      </tr> 
     @foreach (var obj in Model.subList) 
     { 
      <tr> 
       <td> 
        <input type="checkbox" class="[email protected](obj.GroupId)" name="@obj.GroupId" /></td> 
       </td> 
       <td> 
        @obj.Name 
       </td> 
      </tr> 
    </table> 
    } 
} 


<input type="button" value="Save" onclick="PickAllCheckedRows();" /> 

私はこれを以下のようにしようとしていますが、成功しません。また、保存ボタンをクリックすると、チェックされたグループとそのサブアイテムをすべて選択します。どんな助けでも本当に感謝しています。

<script type="text/javascript"> 
    function checkUncheckAll(sender) { 
     alert(sender); 
     var chkElements = document.getElementsByClassName('chkItems'); 
     for (var i = 0; i < chkElements.length; i++) { 
      chkElements[i].checked = sender.checked; 
     } 
    } 

    function PickAllCheckedRows() { 
} 
</script> 

答えて

1

あなたがthis.classを渡しているので、あなたはundefinedに渡して関数を呼び出している:

onclick="checkUncheckAll(this.class)" 

要素は、(彼らはclassNameを持っている)class性質を持っていない、と彼らがいた場合には、あなたはクラスを渡したくない場合は、sender.checkedとして使用しているので、要素自体を渡したいと思います。

.classをコールから削除するだけです。

あなたがグループ内のすべてのをしようとしている場合は、あなたがオフ/チェックするために、他のチェックボックスを取得するときに機能してclassNameを使用する必要があります:

function checkUncheckAll(sender) { 
    var chkElements = document.getElementsByClassName(sender.className); 
    // Note ------------------------------------------------^^^^^^^^^^ 
    for (var i = 0; i < chkElements.length; i++) { 
     if (chkElements[i] !== sender) {    // Not strictly necessary I guess, but... 
      chkElements[i].checked = sender.checked; 
     } 
    } 
} 

あなたを想定しています」 "すべての"チェックボックスには1つのクラスしかありません。

+0

これは機能しています。私が親チェックボックスをクリックすると、その子はチェックされ、親のチェックを外すと、子はチェックされなくなりますが、各サブアイテムを1つずつチェックすると、親チェックボックスはチェックされません。 – Sweetie

+1

@Sweetie:あなたはそれを別々に実装しなければなりません。個々の項目チェックボックスのクリックを処理し、それらがすべて選択されているかどうかに基づいて「すべて」チェックボックスを設定する必要があります。 –

関連する問題