Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: sodark en 22 Febrero 2016, 14:50 pm



Título: Funcionamiento extraño con Jscript y Checkbox
Publicado por: sodark en 22 Febrero 2016, 14:50 pm
El otro dia haciendo un formulario para una web del trabajo me encontre con que cuando chequeaba el checkbox, este se deschequeaba automaticamente.

Código
  1. function toggleDefinirGrups() {
  2. var isChecked = document.forms[0].elements["hihagrups"].checked;
  3. console.log("ESTA CHECKED: "+isChecked);
  4. if ( isChecked ) {
  5. // LO HEMOS ACTIVADO
  6. $("#afegirGrups").prop("disabled",false);
  7. } else {
  8. // ANTIMANAZAS CHECKER
  9. swal({
  10. title: $("#swal_delgrups_title").val() ,  
  11. text: $("#swal_delgrups_text").val() ,  
  12. type: "warning",  
  13. showCancelButton: true,  
  14. confirmButtonColor: "#DD6B55",  
  15. confirmButtonText: $("#swal_confirm").val(),  
  16. cancelButtonText: $("#swal_cancel").val(),  
  17. closeOnConfirm: false,  
  18. closeOnCancel: false
  19. }, function(isConfirm){
  20. if (isConfirm) {
  21. swal($("#swal_confirmed").val(), "", "success");  
  22. $("#afegirGrups").prop("disabled",true);
  23. $("#grups_definits").empty();
  24. } else {
  25. document.forms[0].elements["hihagrups"].checked = true; // Al haber cancelado, volvemos a marcarlo como checked!
  26. swal($("#swal_canceled").val(), "", "error");  
  27. }
  28. }
  29. );
  30. }

Ese es el código JScript

El codigo del formulario (la parte importante es esta):

Código
  1. <td align='left'>
  2. <input type='checkbox' id='hihagrups' class='form-control' name='hihagrups' onClick='toggleDefinirGrups(); return false;' value='S' >
  3.  


Fue quitarle el return false del argumento onClick y el problema desaparecio, pero me gustaria saber el porque de este motivo.

Código
  1. <td align='left'>
  2. <input type='checkbox' id='hihagrups' class='form-control' name='hihagrups' onClick='toggleDefinirGrups();' value='S' >
  3.  

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


Título: Re: Funcionamiento extraño con Jscript y Checkbox
Publicado por: MinusFour en 22 Febrero 2016, 15:16 pm
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


Título: Re: Funcionamiento extraño con Jscript y Checkbox
Publicado por: 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.


Título: Re: Funcionamiento extraño con Jscript y Checkbox
Publicado por: MinusFour en 22 Febrero 2016, 17:21 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.