JQuery evento de cambio de bucle
-
09-10-2019 - |
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
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.