2012-02-03 11 views
8
<li> 
<input type="checkbox" id="master" /> 
    <ul> 
    <li> 
    <input type="checkbox" /> 

$('input').bind('change', function() {}); // exists elsewhere, cannot change 

Al hacer clic en la entrada de nivel superior, Quiero establecer .prop('checked', true) para todos sus hijos, pero quiero evitar que activa el evento change para cada casilla niño.

¿Cómo podría establecer .prop('checked', true) en una entrada sin activar change?

Editar: (expandir)

$('#master').click(function() { 
    $(this).parent().find('input').each(function(n, in) { 
     $(in).prop('checked', true); // this triggers a change event that I need to stop 
    }); 
}); 

Respuesta

19

Lo que está describiendo es la funcionalidad predeterminada. Cambiar un elemento de javascript no activa el evento de cambio.

http://jsfiddle.net/8JsP4/

Note como si hace clic en una casilla de verificación en el ejemplo, se obtiene una alerta, pero si hace clic en el botón, ninguna alerta.

+0

pienso para recrear mi síntoma, que tendría que utilizar una casilla de verificación para comprobar el nivel superior de todas las casillas de nivel más bajo en lugar de un botón separado – tester

+1

Todavía no es un problema http://jsfiddle.net/8JsP4/1/¿Quizás puedas reproducir el problema en mi violín? –

+0

Espera, solo miró tu edición, tu código no hará nada. '$ (this) .find (...' no devolverá nada ya que 'this' es una entrada que ** no contiene ** nada. ¿Es tu html realmente diferente de lo que publicaste? –

0

tratar de desvincular el oyente onchange, a continuación, se unen de nuevo una vez que la propiedad ha sido establecido.

1

Ahora su selector se dirige a todos los elementos input. Puedes darle a tu casilla de verificación principal un Id, y a los demás una clase común.

<li> 
<input id="main-chk"type="checkbox" /> 
    <ul> 
    <li> 
    <input class="children" type="checkbox" /> 

    $('li:first').bind('change', function() { 
     $(this).find('li').prop('checked', 'checked'); 
    }); // exists elsewhere, cannot change 
+0

Tendría que hacer esto sin ids/classes. Simplemente basado en la jerarquía ul/li/input – tester

+0

Actualicé mi respuesta. – Jack

Cuestiones relacionadas