Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema con submit y return true o false

Estas en el tema de Problema con submit y return true o false en el foro de Frameworks JS en Foros del Web. Saludos: Estoy creando una aplicación para reportar teléfonos dañados, para la compañía donde trabajo. Yo escribo el número telefónico en un campo y este corrige ...
  #1 (permalink)  
Antiguo 08/01/2010, 10:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Problema con submit y return true o false

Saludos:

Estoy creando una aplicación para reportar teléfonos dañados, para la compañía donde trabajo. Yo escribo el número telefónico en un campo y este corrige el formato y verifica a través de AJAX si el número telefónico esta reportado en la base de datos y abierto el caso todavia (me refiero sin haberse cerrado el ticket de que está arreglado).

Para evitar que la persona reporte el teléfono si está abierto, por medio del onblur le muestro un mensaje de que ya anteriormente existe un reporte y está abierto en la base de datos.
Código HTML:
Ver original
  1. <script type="text/javascript">
  2. var xmlHttp = false;
  3. function GetXmlHttpObject(){
  4.     var xmlHttp=null;
  5.     try{
  6.         // Firefox, Opera 8.0+, Safari
  7.         xmlHttp=new XMLHttpRequest();
  8.     }catch(e){
  9.         // Internet Explorer
  10.         try{
  11.             xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  12.         }catch(e){
  13.             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  14.         }
  15.     }
  16.     return xmlHttp;
  17. }
  18.  
  19. function checkDomainIfResolveIsNo(f,Domain,Comment){
  20.     xmlHttp=GetXmlHttpObject();
  21.     if (xmlHttp==null){
  22.         alert ("Your explorer do not support AJAX!");
  23.         return;
  24.     }
  25.  
  26.     var url="infoTelAjax.php";
  27.     url=url+"?whatType=checkDomainIfResolveIsNo";
  28.     url=url+"&Domain="+Domain;
  29.     url=url+"&rand="+Math.random();
  30.  
  31.     xmlHttp.onreadystatechange=function(){
  32.         if (xmlHttp.readyState==4 && xmlHttp.status==200){
  33.             if(trim(xmlHttp.responseText) == "1"){
  34.                 document.getElementById("light").style.display="block";
  35.                 document.getElementById("fade").style.display="block";
  36.                 Comment.focus();
  37.                 f.value = "NO";
  38.                 return false;
  39.             }else{
  40.                 f.value = "YES";
  41.                 return true;
  42.             }
  43.         }
  44.     }
  45.     xmlHttp.open("GET",url,true);
  46.     xmlHttp.send(null);
  47. }
  48. <input type="text" name="Domain" class="require" maxlength='12' size="30"  onblur="checkDomainIfResolveIsNo(document.addNewForm.submitForm,document.addNewForm.Domain.value,document.addCommentReport.textareaComment)" />
El problema está cuando la persona en vez de salir del campo y se ejecute el evento de onblur, pulsa la tecla de "Enter" en el mismo campo. Claro está sé que se puede evitar usar esta tecla, pero no me interesa bloquearla. Cuando pulsa la tecla de "Enter" estando en el campo, a pesar de que coloque en el formulario en el evento de onSubmit la misma función de checkPhoneIfResolveIsNo, se envia la información. Según lo que creo que sucede es que corre todo el código y no espera a que haya cambiado el onreadystatechange al nivel 4 de readyState. Sino que ejecuta toda la función hasta llegar al último "curly brace". Este es el formulario que uso:
Código HTML:
Ver original
  1. <form name="addNewForm" action="mod_db.php" method="POST" onsubmit="return checkDomainIfResolveIsNo(document.addNewForm.submitForm,document.addNewForm.Domain.value,document.addCommentReport.textareaComment);">
  2. <input type="hidden" name="submitForm" value="YES" />
  3. <input type="text" name="Domain" class="require" maxlength='12' size="30"  onblur="checkPhoneIfResolveIsNo(document.addNewForm.submitForm,document.addNewForm.Domain.value,document.addCommentReport.textareaComment)" />
  4. <input type="Submit" name="Submit" value="Submit" class='buttons'>
  5. </form>
Hay 3 parametros en la función, el primero es para modificar el campo oculto llamado submitForm, el segundo es para el número telefónico y el tercero es para mostrar otro formulario (que no viene al caso). Mi pregunta es, ¿hay alguna forma de que cuando pulsen la tecla de enter reconozca el cuarto nivel de readyState y reconozca las condiciones y así evitar que se envie el formulario? Ya he logrado hacerlo colocando una condición en donde se ingresa la información a la base de datos en el código de PHP, pero me gustaria que se lograra antes de enviar la información.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #2 (permalink)  
Antiguo 08/01/2010, 11:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: Problema con submit y return true o false

Debes tener en cuenta que estás haciendo una petición asíncrona, no se esperará a que se obtenga la respuesta, sino que la ejecución del código seguirá su flujo normal.

Debes, o hacer una petición sincrónica, o cancelar la acción del evento onsubmit y esperar a que se reciba la respuesta para enviar el formulario.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 08/01/2010, 11:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema con submit y return true o false

Perfecto, ya está resuelto, no se me había ocurrido el de bloquear el evento onsubmit y luego cuando llegue al nivel 4 de readyState enviar la información usando la función de submit().

Muchas gracias.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: ajax, return, submit
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:45.