El otro dia haciendo un formulario para una web del trabajo me encontre con que cuando chequeaba el checkbox, este se deschequeaba automaticamente.
function toggleDefinirGrups() {
var isChecked = document.forms[0].elements["hihagrups"].checked;
console.log("ESTA CHECKED: "+isChecked);
if ( isChecked ) {
// LO HEMOS ACTIVADO
$("#afegirGrups").prop("disabled",false);
} else {
// ANTIMANAZAS CHECKER
swal({
title: $("#swal_delgrups_title").val() ,
text: $("#swal_delgrups_text").val() ,
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: $("#swal_confirm").val(),
cancelButtonText: $("#swal_cancel").val(),
closeOnConfirm: false,
closeOnCancel: false
}, function(isConfirm){
if (isConfirm) {
swal($("#swal_confirmed").val(), "", "success");
$("#afegirGrups").prop("disabled",true);
$("#grups_definits").empty();
} else {
document.forms[0].elements["hihagrups"].checked = true; // Al haber cancelado, volvemos a marcarlo como checked!
swal($("#swal_canceled").val(), "", "error");
}
}
);
}
Ese es el código JScript
El codigo del formulario (la parte importante es esta):
<td align='left'>
<input type='checkbox' id='hihagrups' class='form-control' name='hihagrups' onClick='toggleDefinirGrups(); return false;' value='S' >
Fue quitarle el return false del argumento onClick y el problema desaparecio, pero me gustaria saber el porque de este motivo.
<td align='left'>
<input type='checkbox' id='hihagrups' class='form-control' name='hihagrups' onClick='toggleDefinirGrups();' value='S' >
Se comporta como una especie de rollback? O puede ser que el return false, lo interprete como un checked = false.
Sin embargo si ponia return true, me dejaba activarlo y desactivarlo, por lo que ahí se me rompieron los esquemas
Cuando regresas false de un event handler cancelas el evento (si no es un evento de error, unload o mouseover).
https://html.spec.whatwg.org/multipage/webappapis.html#the-event-handler-processing-algorithm
La cosa es que ese código como puedes ver en la función JS realiza mas tareas, entiendo pues que el evento que estoy cancelando es el check pero la función no la trata como un evento sino como la acción de un evento.
No? Por ello todo lo que realizo dentro de la función queda activado como tal, pero el checkbox sin embargo se resetea.
Cita de: sodark en 22 Febrero 2016, 15:41 PM
La cosa es que ese código como puedes ver en la función JS realiza mas tareas, entiendo pues que el evento que estoy cancelando es el check pero la función no la trata como un evento sino como la acción de un evento.
No? Por ello todo lo que realizo dentro de la función queda activado como tal, pero el checkbox sin embargo se resetea.
Lo que pasa es que cuando cancelas el evento de click para un checkbox ocurre esto:
Citar
The canceled activation steps consist of setting the checkedness and the element's indeterminate IDL attribute back to the values they had before the pre-click activation steps were run.
https://html.spec.whatwg.org/multipage/forms.html#checkbox-state-%28type=checkbox%29
Lo que significa que vuelve al estado inicial si es cancelado.