Pregunta

Tengo varias casillas de verificación. Si un usuario se comprueba cualquiera de ellos, tengo que ver si se les permite hacer eso, si no, notificar a ellos y desactivarla. Sin embargo, que esto me en un bucle, ya que se inicia el cambio de nuevo! ¿Cómo puedo venir más esto?

$('#step_1, #step_2, #step_3, #step_4').change(function(event) {
        if(!$('#section_2_active').attr('checked')){
            alert('You can not select output options when "Create Output" has not been selected.');

            $(this).attr('checked', false);

            $('#other_stages :checkbox:not(#section_2_active, #co_t)').change();
        }

});

No puedo desatar y luego volver a vincular el evento de cambio ya que hay otro plugin que depende de este evento.

¿Qué otras opciones tengo? Puedo enviar una llamada de función a cada casilla pero estoy esperando algo un poco más elegante, si no, será por defecto esto.

Gracias a todos por la ayuda

¿Fue útil?

Solución

Se puede usar .trigger() para pasar un parámetro adicional a su manejador, usaremos loop. Si se trata de false, no ejecute el gatillo otro elemento nuevo, como esto:

$('#step_1, #step_2, #step_3, #step_4').change(function(event, loop) {
  if(!$('#section_2_active').attr('checked')){
    alert('You can not select output options when "Create Output" has not been selected.');
    $(this).attr('checked', false);
    if(loop !== false) 
      $('#other_stages :checkbox:not(#section_2_active, #co_t)').trigger('change', false);
  }
});

Otros consejos

El cambio más simple es algo como esto:

var inClickHandler = false;

function OnChecked(evt) { 
  if (inClickHandler) {
    inClickHandler = false;
    return;
  }
  inClickHandler = true;

  // Do your stuff.
}

¿Por qué se llama a esta línea? $('#other_stages :checkbox:not(#section_2_active, #co_t)').change(); Por lo que yo puedo ver que no es necesario esto y no lo hará a continuación bucle. La casilla de verificación todavía comprobará a menos que utilice event.preventDefault(); y la .attr('checked',false); no cambiará gatillo, probablemente debido a los problemas que está teniendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top