Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/01/2010, 10:58
Avatar de abimaelrc
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