Foros del Web » Programando para Internet » Javascript »

captura onblur

Estas en el tema de captura onblur en el foro de Javascript en Foros del Web. tengo un formulario en el que al entrar el codigo de un articulo compruebo con ajax una serie de incidencias lanzo mensajes de aviso. segun ...
  #1 (permalink)  
Antiguo 31/08/2017, 10:53
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 22 años, 3 meses
Puntos: 0
captura onblur

tengo un formulario en el que al entrar el codigo de un articulo compruebo con ajax una serie de incidencias lanzo mensajes de aviso. segun el tipo de mensaje debo avanzar o mantener el foco en el mismo campo.

la llamada a va bien, pero para lanzar la funcion de MostrarConsuta utilizo el evento OnBlur y cuando hay incidencias se queda lanzando una vez y otra el mensaje en alert

Código:
                                   
 <input type="text" class="form-control" maxlength="8" name="codigoOD" id="codigoOD" 
                                            onBlur="MostrarConsultaD();" 
                                            value="<?php echo $codigoOD; ?>"/>
la funcion llamada
Código:
	function MostrarConsultaD(){
		var id = document.formdetall.codigoOD.value;
		var url = 'c_articulo_LC.php';
			$.ajax({
			type:'POST',
			url:url,
			data:'id='+id,
			success: function(valores){
					var datos = eval(valores);					
					$('#radODLC').val(datos[0]);
					$('#ejeODLC').val(datos[1]);
					$('#cilODLC').val(datos[2]);
					$('#esfODLC').val(datos[3]);
					$('#diaODLC').val(datos[4]);
					var terror = datos[0];
					var ustock = datos[9];
					if (terror == 'ERROR1') {
						alert('Faltan digitos');
						$('#codigoOD').val('');
						$('#radODLC').val('');
						$('#ejeODLC').val('');
						$('#cilODLC').val('');
						$('#esfODLC').val('');
                                                $('#diaODLC').val('');
						document.formdetall.codigoOD.focus();					
					}
					if (terror == 'ERROR2') {
						alert('CODIGO ARTICULO no definida');
						$('#codigoOD').val('');
						$('#radODLC').val('');
						$('#ejeODLC').val('');
						$('#cilODLC').val('');
						$('#esfODLC').val('');
						$('#diaODLC').val('');
						document.formdetall.codigoOD.focus();					
					}
					if (terror == 'ERROR3') {
						alert('ATENCION: DIFERENTE TDA ');
						$('#radODLC').val(datos[0]);
						$('#ejeODLC').val(datos[1]);
						$('#cilODLC').val(datos[2]);
						$('#esfODLC').val(datos[3]);
						$('#diaODLC').val(datos[4]);
						document.formdetall.codigoOD.focus();					
					}
					if (ustock < 1) {
						alert('No hay stock de este ARTICULO ');
						document.formdetall.codigoOI.focus();
					}

				return false;
			}
		});
		return false;
	}
creo que el problema lo tengo en que no se usar correctamente la funcion onblur pero llevo probando y no consigo mi objetivo.
me podrias decir tambien como lanzar en lugar de un alert (que queda muy mal) abrir una ventana con el mensaje?

gracias
  #2 (permalink)  
Antiguo 31/08/2017, 12:02
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: captura onblur

Sería más eficiente si la búsqueda se realizara al momento de escribir (eventos como: input, keypress, keyup, keydown) y los mensajes de alerta los mostraras en una etiqueta junto a la caja de texto. De esta forma, el usuario verá los resultados mientras escribe, sin la necesidad de quitar el foco al campo de texto y sin mensajes de alerta o ventanas modales que deba cerrar.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 01/09/2017 a las 22:03 Razón: Verbo mal empleado
  #3 (permalink)  
Antiguo 01/09/2017, 05:22
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 22 años, 3 meses
Puntos: 0
Respuesta: captura onblur

No puedo hacerlo porque hasta que el codigo del articulo no esta escrito completamente no hace falta comprobar nada.
  #4 (permalink)  
Antiguo 01/09/2017, 08:45
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: captura onblur

Cita:
Iniciado por mikil Ver Mensaje
No puedo hacerlo porque hasta que el codigo del articulo no esta escrito completamente no hace falta comprobar nada.
Y el usuario como puede saber eso?

Si estas usando php -segun veo por tu formulario- porque no llenas un select con los datos?

<select>
<option value="">Default option</option>

<?php
for($k=0;$k<sizeof($someVar);$k++){
echo '<option value="'.$someVar["value"][$k].'">'$someVar["title"][$k].'</option>';
}
?>
</select>

Y si la lista fuese MUY grande, tener una option de cargar mas que siempre este al ultimo con algun color de fondo llamativo y aplicas ajax,

En cuanto a lo del mensaje te recomiendo que tengas un div por ahí que te sirva, yo despues de body pondria un div así:

<div id="respuestaMensaje"></div>

Y le das los estilos, yo lo centraría, hay muchas formas pero lo hare con margin y dando un width arbitrario:

display:none
position: absolute, o fixed //prefiero fixed asi no importa en que parte del documento estes, siempre se verá
top:0;
left:0;
width: 400px
margin:100px auto

Luego con js lo muestras:

Código Javascript:
Ver original
  1. myAlert(id,msg,action){
  2. var sign = document.getElementById(id);
  3.     while(sign.firstChild){
  4.     sign.removeChild(sign.firstChild);
  5.     }
  6. var content = document.createTextNode(msg);
  7. sign.appendChild(content);
  8. sign.style.display=action;
  9. }

La idea de ese parametro "action" es para poder cerrar la alerta tambien con algun botoncito.

Mostrar:
myAlert("respuestaMensaje", "Que hubo?", "block");

Cerrar:
myAlert("respuestaMensaje", "", "none");

Cabe destacar que no me gusta inner, por eso uso appends

Eso por mi parte, y me sumo al compañero de arriba mala idea onblur, si vas a usar ajax, que sea para "tiempo real", es la idea no?.

Saludos

Última edición por alvaro_trewhela; 01/09/2017 a las 09:19
  #5 (permalink)  
Antiguo 01/09/2017, 22:00
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: captura onblur

Cita:
Iniciado por mikil Ver Mensaje
No puedo hacerlo porque hasta que el codigo del articulo no esta escrito completamente no hace falta comprobar nada.
¿Y por qué no?

Muchos sistemas que trabajan con datos personales utilizan esa forma de comprobación de datos pues le permite ahorrar tiempo al usuario evitando tener que reingresar sus datos en caso de que, el que está ingresando, ya exista en la base de datos (como sucede con los nombres de usuario o los correos electrónicos). Incluso si trabajaras con caché o con una simulación de la caché, podrías ayudarlo autocompletando el dato que está escribiendo, tal y como lo hace Google con su buscador.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 04/09/2017, 00:37
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 22 años, 3 meses
Puntos: 0
Respuesta: captura onblur

muchas gracias por las sugerencias,
pero no puedo cargar una lista porque tengo mas de 80.000 productos codificados por códigos de 7 dígitos correlativos por familias, y me gustaria confirmar que el código es correcto en el momento de finalizar su entrada, y que hay stock disponible.
la funcion ajax ya lo hace todo correctamente, lo que pasa es que los mensajes los muestra una y otra vez, y creo que es al volver a situar el foco en otro input vuelve a lanzar la función.
  #7 (permalink)  
Antiguo 04/09/2017, 08:38
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: captura onblur

Cita:
Iniciado por mikil Ver Mensaje
[...] no puedo cargar una lista porque tengo mas de 80.000 productos codificados por códigos de 7 dígitos correlativos por familias, y me gustaria confirmar que el código es correcto en el momento de finalizar su entrada, y que hay stock disponible [...]
En realidad, mediante el proceso de búsqueda no se cargarían los ochenta mil registros. La búsqueda la haría el motor de la base de datos, con una sencilla consulta SQL que escribirías, y tan solo se devolvería el número de coincidencias. Por ejemplo, cuando en un sistema de registro se quiere saber si un nickname ya está en uso, se busca la cantidad de veces que este aparece en la base de datos (que debería ser uno o cero) y, sea un caso u otro, se muestra un mensaje de aviso y se impide o permite el registro del dato ingresado. En tu caso, dicho mensaje puedes mostrarlo en tiempo real en una etiqueta que puedes colocar a la derecha de la caja de texto. Es una forma de trabajo utilizada en muchos sitios por su simpleza y poca intromisión con las actividades que desarrolla el usuario final. Obligarlo a quitar o asignar el foco al campo de texto, puede resultarle incómodo.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 04/09/2017, 09:55
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: captura onblur

Mas allá de todo no veo error, porque no pruebas retornando luego de focusear

if (terror == 'ERROR1') {
alert('Faltan digitos');
$('#codigoOD').val('');
$('#radODLC').val('');
$('#ejeODLC').val('');
$('#cilODLC').val('');
$('#esfODLC').val('');
$('#diaODLC').val('');
document.formdetall.codigoOD.focus();
return false;
}

prueba...

Edito y este de donde salio?
document.formdetall.codigoOI.focus();

Última edición por alvaro_trewhela; 04/09/2017 a las 10:13

Etiquetas: ajax, form, funcion, onblur, php
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 09:54.