Foros del Web » Programando para Internet » Javascript »

guardar al perder el foco

Estas en el tema de guardar al perder el foco en el foro de Javascript en Foros del Web. Estimados, tengo el siguiente problema... Tengo una tabla dinamica, la cual en cada celda tiene un input visible (y otros ocultos), y cada celda es ...
  #1 (permalink)  
Antiguo 04/05/2018, 14:24
 
Fecha de Ingreso: noviembre-2011
Mensajes: 121
Antigüedad: 12 años, 5 meses
Puntos: 0
guardar al perder el foco

Estimados, tengo el siguiente problema...

Tengo una tabla dinamica, la cual en cada celda tiene un input visible (y otros ocultos), y cada celda es un form distinto.

Este es el código donde estoy trabajando.
Código PHP:
<?php while ($ver mysqli_fetch_row($alumnos)){ ?>
                  <tr style='vertical-align: middle;'>
                <td><?php echo strtoupper($ver[4]." ".$ver[5]." ".$ver[6]); ?></td>
                <?php 
                    
for ($i=0;$i<$cantidad_notas;$i++){
                        
$na mysqli_fetch_row($notas);?>
                        <td><form id="form" name="form" method="post">
                            <input type="hidden" id="id_curso" name="id_curso" value="<?php echo $id_curso ?>"/>
                            <input type="hidden" id="id_asignatura" name="id_asignatura" value="<?php echo $id_asignatura ?>"/>
                            <input type="hidden" id="semestre" name="semestre" value="<?php echo $semestre ?>"/>
                            <input type="hidden" id="anho" name="anho" value="<?php echo $anho ?>"/>
                            <input type="hidden" id="id_alumno" name="id_alumno" value="<?php echo $ver[0?>"/>
                            <input type="hidden"  class="form-control-sm" id="id_nota" name="nota" size="1" value="<?php echo $na[0]; ?>"/>
                            <input type="text"  class="form-control-sm" id="nota" name="nota" size="1" value="<?php echo $na[4]; ?>"/>
                            </form>
                        </td>
                <?php ?>
                    <td>
                        <?php
                            $promedio 
0;
                            for (
$j=0;$j<$contador_notas;$j++){
                                
$no mysqli_fetch_row($notas2);
                                
$promedio $promedio+$no[4];
                            }
                            echo 
round($promedio/$contador_notas1PHP_ROUND_HALF_UP);
                        
?>
                    </td>
                  </tr>
               <?php }    ?>


El tema es que necesito, de alguna forma, que cada vez que cambie de celda se registre el cambio en la base de datos.

Tengo pensado en hacerlo con Ajax, pero al salir de la celda no se envían los datos del formulario.

Código:
function actualizarNota(){
	
	var id_nota = parseInt(document.getElementById("id_nota").value);
	var id_curso = parseInt(document.getElementById("id_curso").value);
	var id_asignatura = parseInt(document.getElementById("id_asignatura").value);
	var id_alumno = parseInt(document.getElementById("id_alumno").value);
	var nota = parseFloat(document.getElementById("nota").value);
	var semestre = parseInt(document.getElementById("semestre").value);
	var anho = parseInt(document.getElementById("anho").value);
	
	string=
		"id_notas=" + id_notas +
		"&id_curso=" + id_curso +
		"&id_asignatura=" + id_asignatura +
		"&id_alumno=" + id_alumno +
		"&nota=" + nota +
		"&semestre=" + semestre +
		"&anho=" + anho;
		
	$.ajax({
	type:"POST",
	url:"../notasv2/agregarNota.php",
	data:string,
	success:function(r){
		if(r==1){
				$('#tabla').load('tabla_NOTAS.php');
				alertify.success("Agregada correctamente");
			}else{
		   		alertify.error(r);
		   }
	}
	})	
}
Alguna guía de por donde deba atacar el problema?

Última edición por chumy_; 04/05/2018 a las 14:25 Razón: falta informacion
  #2 (permalink)  
Antiguo 04/05/2018, 17:47
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: guardar al perder el foco

¿En qué momento manda a llamar la función actualizarNota?

Por lo que se puede ver de tu código tienes algunos errores:

Los campos sólo pueden llevar id cuando éste es único, al tener una tabla, estarías provocando tener id's duplicados, por lo que tu envío de datos fallaría.

No estás asignando en ningún momento un evento para que al salir de un campo se ejecute tu función de envío, podrías hacerlo mediante

$('input').blur(actualizarNota());

Pero entonces, te sugiero identificar los campos por nombre y no por id, por lo que a la función le deberías pasar el form en que se encuentra el campo desenfocado:

$('input').blur(actualizarNota($(this.form)));

Y al recibirlo en la función,
function actualizarNota(f){
//.....
}

Podrías acceder a los campos que estarían dentro de "f".

Esto es sólo una pista para que puedas continuar, no un código 100% funcional.
  #3 (permalink)  
Antiguo 06/05/2018, 08:35
 
Fecha de Ingreso: noviembre-2011
Mensajes: 121
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: guardar al perder el foco

Cita:
Iniciado por ocp001a Ver Mensaje
¿En qué momento manda a llamar la función actualizarNota?

Por lo que se puede ver de tu código tienes algunos errores:

Los campos sólo pueden llevar id cuando éste es único, al tener una tabla, estarías provocando tener id's duplicados, por lo que tu envío de datos fallaría.

No estás asignando en ningún momento un evento para que al salir de un campo se ejecute tu función de envío, podrías hacerlo mediante

$('input').blur(actualizarNota());

Pero entonces, te sugiero identificar los campos por nombre y no por id, por lo que a la función le deberías pasar el form en que se encuentra el campo desenfocado:

$('input').blur(actualizarNota($(this.form)));

Y al recibirlo en la función,
function actualizarNota(f){
//.....
}

Podrías acceder a los campos que estarían dentro de "f".

Esto es sólo una pista para que puedas continuar, no un código 100% funcional.
Como decía, es el código base con el que estoy trabajando, porque he hecho muchas modificaciones y preferí comenzar casi desde cero.

Etiquetas: ajax, foco, perder, php, tabla
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 01:21.