2010-11-13 22 views
6

consideran este sencillo código de ejemplo:¿Cómo marcar todas las casillas en forma actual con jquery?

<form name="text" id="frm1" method="post"> 
    <input type="checkbox" name="name[]" value="1000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="1001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="1002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="1003"> Chk4<br> 
    <input type="checkbox" id="select_all"/> Select All<br> 
</form> 

<form name="text" id="frm2" method="post"> 
    <input type="checkbox" name="name[]" value="4000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="4001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="4002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="4003"> Chk4<br> 
    <input type="checkbox" id="select_all"/> Select All<br> 

Estoy intentando conseguir Seleccionar todo para trabajar en cada forma (formas se generan dinámicamente en mi código de producción y tienen diferentes nombres, diferentes)

Estoy usando este jquery pero select_all solo funciona para el primer formulario; no ha afectado en formularios debajo del primero.

$('#select_all').change(function() { 
    var checkboxes = $(this).closest('form').find(':checkbox'); 
    if($(this).is(':checked')) { 
     checkboxes.attr('checked', 'checked'); 
    } else { 
     checkboxes.removeAttr('checked'); 
    } 
}); 

No puedo ver cómo marcar todas las casillas de verificación en cualquier casilla de verificación contenida en el ID del formulario.

¿Puede alguien señalarme en la dirección correcta?

Muchas gracias

+0

Enchufe desvergonzado: echa un vistazo a mi [plugin de jQuery checkAll] (https://github.com/mjball/jQuery-CheckAll) (sigue trabajando en la documentación) –

Respuesta

8

tiene varios elementos con el mismo ID, que es el HTML no válido y es la causa del problema que se está viendo. Cambie id="select_all" a class="select_all", y $('#select_all') a $('.select_all'), y debe ser bueno.

+1

Si tan solo pudiera reclamar la última hora y media de la búsqueda de Google. – Chris

0

Los ID son únicos. Tienes dos. Si desea varios elementos, use class="select_all" y $('.select_all')

1

Tiene dos elementos con id select_all; eso no está permitido Cambiar eso a una clase y probar este:

$('.select_all').change(function() { 
    var checkboxes = $(this).closest('form').find(':checkbox'); 
    checkboxes.attr('checked', $(this).is(':checked')); 
}); 
+1

No es necesario utilizar '.is (': checked')' porque puede inspeccionar la propiedad '.checked' de la casilla de verificación. No tiene sentido tener una llamada jQuery extra – Gareth

+1

Eh, jQuery es barato. Es poco probable que sea un cuello de botella. – kevingessner

0
$('#select_all').click(function() { 
    $("input:checkbox", $(this).closest('form')).attr("checked", this.checked) 
}); 

Sin embargo, se necesita solamente un artículo con id select_all para que esto funcione. Si se puede cambiar a una clase de select_all continuación, basta con sustituir el # con un . y ya está bueno para ir

0

Prueba esto:

$("#select_all").click(function()    
     { 
      var checked_status = this.checked; 
      $("input[@name=name]").each(function() 
      { 
       this.checked = checked_status; 
      }); 
     }); 
+0

También asegúrese de tener una clase "select_all" en lugar de dos ID. – cosmoonot

+0

Esto no ayudará. El problema es la identificación duplicada. Y luego seleccionará * todas * casillas de verificación de * todos * formularios. –

+0

Sí, me di cuenta de que después de publicar el código. Por favor vea la primera respuesta, debería resolver su problema. – cosmoonot

0

no se puede tener dos elementos con el mismo ID. example

html:

<form name="text" id="frm1" method="post"> 
    <input type="checkbox" name="name[]" value="1000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="1001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="1002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="1003"> Chk4<br> 
    <input type="checkbox" id="select_all_1"/> Select All<br> 
</form> 

<form name="text" id="frm2" method="post"> 
    <input type="checkbox" name="name[]" value="4000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="4001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="4002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="4003"> Chk4<br> 
    <input type="checkbox" id="select_all_2"/> Select All<br> 
</form> 

JS:

$(function() { 

    $('#select_all_1, #select_all_2').bind('click', function(event) { 

     var 
      ref = this, 
      refChecked = this.checked; 

     $(this.form).find('input[type="checkbox"]').each(function(i, el) { 
      if(this != ref) 
       this.checked = refChecked; 
     }); 

    }); 

}); 
Cuestiones relacionadas