2009-07-31 16 views

Respuesta

4

jQuery (EDITADO para alternar activar/desactivar todos):

$(document).ready(function() { 
    $("#toggleAll").click(function() { 
     $("#chex :checkbox").attr("checked", $(this).attr("checked")); 
    });  
}); 

La razón por la que tenía que hacer un click() continuación, comprobar si hay checked estado se debe a que si se intenta una casilla de verificación "toggle", la casilla de verificación que se está alternando no conservará su estado verificado. De esta forma, conserva el estado de verificación y alterna de forma efectiva.

HTML:

<input type="checkbox" id="toggleAll" /> 
<div id="chex"> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
</div> 
+0

Los ven como casillas de verificación ASP.NET, ASP.NET MVC no. MVC solo usaría casillas regulares de html. ¿Cómo cambia eso las cosas? – KingNestor

+0

Con esta solución, si el usuario desmarca la casilla de verificación "seleccionar todo", las casillas permanecen marcadas. Consulte mi respuesta a continuación para que jQuery maneje la selección Y anule la selección de todos los cuadros. – idrumgood

+0

@kingnestor - no cambiará nada. usa tus casillas de verificación estándar y esto funcionará. – Jason

1

Mientras que el Las respuestas publicadas anteriormente funcionarán, se encontrará con problemas si tiene más de un conjunto de casillas de verificación en una sola página.

Este formato funcionará independientemente:

<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" /></th> 
      <th>Column 1</th> 
      <th>Column 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 1</td> 
      <td>Tabular Data 2</td> 
     </tr> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 3</td> 
      <td>Tabular Data 4</td> 
     </tr> 
    </tbody> 
</table> 

y el guión ...

$(function() { 
    $('th > :checkbox').click(function() { 
     $(this).closest('table') 
      .find('td > :checkbox') 
      .attr('checked', $(this).is(':checked')); 
    }); 
}); 
+0

que es mucho más complicado de lo necesario. el mío funcionará independientemente del formato siempre que se agreguen los selectores apropiados – Jason

+1

@Jason: Ciertamente estoy de acuerdo en que se puede lograr el mismo efecto con menos código, pero independientemente, el método mostrado en mi respuesta permitirá que múltiples conjuntos de casillas de verificación existan en un solo página. – dcharles

1

modificando ligeramente marcado de la respuesta de Marve (ID dando a la mesa)

Working Demo →

EDITAR:

Versión actualizada donde la casilla 'selectAll' refleja correctamente el estado de las casillas de verificación. P.ej. si selecciona todas las casillas de verificación manualmente, seleccione Todas las casillas de verificación se verificarán automáticamente. Pruebe la demostración para comprender el comportamiento.

Código:

<table id='myTable'> 
    <thead> 
     <tr> 
      <th><input type="checkbox" /></th> 
      <th>Column 1</th> 
      <th>Column 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 1</td> 
      <td>Tabular Data 2</td> 
     </tr> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 3</td> 
      <td>Tabular Data 4</td> 
     </tr> 
    </tbody> 
</table> 

Su jQuery podría ser tan simple como esto:

$(document).ready(
    function() 
    { 
     $('#myTable th input:checkbox').click(
      function() 
      { 
       $('#myTable td input:checkbox').attr('checked', $(this).attr('checked')); 
      } 
     ); 

     //The following code keeps the 'selectAll' checkbox in sync with 
     //the manual selection of the checkboxes by user. This is an additional usability feature. 
     $('#myTable tr input:checkbox').click(
      function() 
      { 
       var checkedCount = $('#myTable td input:checkbox:checked').length; 
       var totalCount = $('#myTable td input:checkbox').length; 
       $('#myTable th input:checkbox').attr('checked', checkedCount === totalCount); 
      } 
     ); 
    } 
); 
+0

¡Me gusta Yogi! ¡¡¡Esto es exactamente lo que estaba buscando!!! – longda

+0

Igual que mi comentario anterior ... esto no funcionó para mí hasta que puse un espacio antes del selector ": checked". – longda

10

Esto mantendrá todas las casillas de verificación individuales el mismo que el "marque todas las" uno

$("#id-of-checkall-checkbox").click(function() { 
    $(".class-on-my-checkboxes").attr('checked', this.checked); 
}); 

Esto mantendrá el "marcar todos" uno sincronizado con si las casillas de verificación individuales son o no todas c atacado o no

$(".class-on-my-checkboxes").click(function() { 
    if (!this.checked) { 
     $("#id-of-checkall-checkbox").attr('checked', false); 
    } 
    else if ($(".class-on-my-checkboxes").length == $(".class-on-my-checkboxes:checked").length) { 
     $("#id-of-checkall-checkbox").attr('checked', true); 
    } 
}); 
+0

Esto se ve como el caso else si no funciona ... debe establecer la casilla de verificación Checkall en verdadero cuando se marcan todas las casillas secundarias. ¿Algunas ideas? – longda

+0

Creo que lo descubrí ... agregué un espacio antes de ": comprobado" y funcionó. – longda

0

Pruebe esto para la tabla HTML.

<table class="rptcontenttext" style="width: 100%; border-style: solid; border-collapse: collapse" 
     border="1px" cellpadding="0" cellspacing="0"> 
     <thead> 
      <tr> 
      <th style="text-align:left;width:10px;"> 
      <input type="checkbox" value="true" name="chkVerifySelection" id="chkVerifySelection" onchange="return  checkAllVerifySelection();" /> 
      </th> 
      <td class="rptrowdata" align="left"> 
       Employee ID 
      </td> 
      </tr> 
     </thead> 
     <tbody style="overflow-y: auto; overflow-x: hidden; max-height: 400px; width: 100%;"> 
      @for (int i = 0; i < Model.EmployeeInformationList.Count; i++) 
      {  
      <tr> 
      <td style="width:10px">  
       @{ 
       if (Model.EmployeeInformationList[i].SelectStatus==true) 
       { 
       @Html.CheckBoxFor(model => model.EmployeeInformationList[i].SelectStatus, new { @class = "VerifyStatus" ,disabled =     "disabled",@checked="checked" }) 
       } 
       else 
        { 
        @Html.CheckBoxFor(model => model.EmployeeInformationList[i].SelectStatus, new { @class = "VerifyStatus" }) 
        } 
       }   
      </td>    
      <td class="rptrowdata" align="left" style="width: 70px"> 

       @Html.Encode(Model.EmployeeInformationList[i].StrEmpID) 

      </td> 
       <td class="rptrowdata" align="center" style="width: 50px"> 
       @Html.HiddenFor(m=>m.EmployeeInformationList[i].strEmpOldCardNo) 
       @Html.Encode(Model.EmployeeInformationList[i].strEmpOldCardNo) 
      </td> 
      </tr> 
      } 
     </tbody> 
     </table> 

Guión:

function checkAllVerifySelection() { 
    var flag = $('input[name=chkVerifySelection]').is(':checked'); 
    if (flag) { 
     $(".VerifyStatus").each(function() { 
     $(this).attr('checked', true); 
     }); 
    } 
    else { 
     $(".VerifyStatus").each(function() { 
     $(this).attr('checked', false); 
     }); 
    } 
    return true; 
    } 
Cuestiones relacionadas