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:
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:Ver original
<script type="text/javascript"> var xmlHttp = false; function GetXmlHttpObject(){ var xmlHttp=null; try{ // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); }catch(e){ // Internet Explorer try{ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } function checkDomainIfResolveIsNo(f,Domain,Comment){ xmlHttp=GetXmlHttpObject(); if (xmlHttp==null){ alert ("Your explorer do not support AJAX!"); return; } var url="infoTelAjax.php"; url=url+"?whatType=checkDomainIfResolveIsNo"; url=url+"&Domain="+Domain; url=url+"&rand="+Math.random(); xmlHttp.onreadystatechange=function(){ if (xmlHttp.readyState==4 && xmlHttp.status==200){ if(trim(xmlHttp.responseText) == "1"){ document.getElementById("light").style.display="block"; document.getElementById("fade").style.display="block"; Comment.focus(); f.value = "NO"; return false; }else{ f.value = "YES"; return true; } } } xmlHttp.open("GET",url,true); xmlHttp.send(null); } </script> <input type="text" name="Domain" class="require" maxlength='12' size="30" onblur="checkDomainIfResolveIsNo(document.addNewForm.submitForm,document.addNewForm.Domain.value,document.addCommentReport.textareaComment)" />
Código HTML:
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. Ver original
<form name="addNewForm" action="mod_db.php" method="POST" onsubmit="return checkDomainIfResolveIsNo(document.addNewForm.submitForm,document.addNewForm.Domain.value,document.addCommentReport.textareaComment);"> <input type="hidden" name="submitForm" value="YES" /> <input type="text" name="Domain" class="require" maxlength='12' size="30" onblur="checkPhoneIfResolveIsNo(document.addNewForm.submitForm,document.addNewForm.Domain.value,document.addCommentReport.textareaComment)" /> <input type="Submit" name="Submit" value="Submit" class='buttons'> </form>