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<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);
}
<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<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'>
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.