PHP - como enviar 'name' en onchange a un ajax

 
Vista:
Imágen de perfil de David

como enviar 'name' en onchange a un ajax

Publicado por David (38 intervenciones) el 09/10/2014 22:40:27
Hola foristas,

tengo un problema con una funcion en ajax y un formulario php.

Cuando realizo una consulta el form me dibuja las respuestas en unos input:

1
<input type="text" name="tabla1" id="asignatura4"  />
1
<input type="text" name="asignatura1" id="asignatura1"onChange="valida_licencia_bl($(this).val())" />
1
<input type="text" name="tabla2" id="asignatura4"  />
1
<input type="text" name="asignatura2" id="asignatura2" onChange="valida_licencia_bl($(this).val())" />


esta es la funcion ajax:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function valida_licencia_bl(){
			$(document).ready(function(){
				  var codigo;
				  var curso;
				  //hacemos focus al campo de búsqueda
				  $("#codigo").focus();
				  //comprobamos si se pulsa una tecla
				  $("#codigo").keyup(function(e){
						//obtenemos el texto introducido en el campo de búsqueda
 
						codigo = $("#tabla").val();
						curso = $("#asignatura").val();
						 //hace la búsqueda													   
							 $.ajax({
								   type: "POST",
								   url: "secciones/buscar_lic_blink.php",
 
								   data: {
									   codigo: codigo,
									   //grado: grado
									   },
								   dataType: "html",
								   beforeSend: function(){
											  //imagen de carga
										   $("#resultado").html("<p align='center'><img src='ajax-loader.gif' /></p>");
								   },
								   error: function(){
										   alert("error petición ajax");
									 },
								  success: function(data){
										$("#resultado").empty();
										$("#resultado").append(data);
										//$("#busqueda").val(consulta);										
									}
							});
				  });
			});
			}


El problema que tengo es que ajax espera en nombre de las cajas asi:

1
2
codigo = $("#tabla").val();
	curso = $("#asignatura").val();

No sé como enviarle en cada OnChange el valor que deberia ser, por ejemplo tabla2 y asignatura2 para que haga su trabajo. Como puedo hacer esto dinamico o con los name de los input que yo quiera.

Agradezco mucho la respuesta

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

como enviar 'name' en onchange a un ajax

Publicado por Vainas (262 intervenciones) el 09/10/2014 22:49:50
Buenas. No termino de ver el problema. No se si lo podrias explicar un poco mas.

Tampoco entiendo por que haces :

1
2
3
function valida_licencia_bl(){
			$(document).ready(function(){...});
}


Yo creo que deberia ser asi:

1
2
3
$(document).ready(function(){
   function valida_licencia_bl(){...}
});


Esto es que cuando este cargado el documento cargue la siguiente funcion...

Saludos.

update: he visto un poco por encima tu codigo. No te vale algo asi?: http://www.devbridge.com/sourcery/components/jquery-autocomplete/

En teoria no deberias repetir el id en distintas etiquetas, se supone que identifica solo una etiqueta. puedes usar class en cambio.

Si haces:

1
valida_licencia_bl($(this).val());

dentro del input, le estas pasando un parametro a la funcion que luego no recoges. La funcion tendria que ser algo como:

1
2
3
function valida_licencia_bl(valor_pasado){
			$(document).ready(function(){
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

como enviar 'name' en onchange a un ajax

Publicado por David (38 intervenciones) el 09/10/2014 23:02:21
Hola, yo dibujo la siguiente tabla dinamicamente :


eliminar3

con el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php } else {
		  do { ?>
     <tr>
       <td width="45"> </td>
       <td width="122"><input  id="grado" class="round" style="width:120px" value="<?php echo $row_RsDocente['Grado']; ?>"/></td>
       <td width="160"></td>
       <td width="182"><input id="asignatura" class="round" style="width:180px"  value="<?php echo $row_RsDocente['Asignatura']; ?>"/></td>
       <td width="101"></td>
       <td width="234"><input  id="codigo" type="text" class="round" style="width:230px" name="licencia" onChange="valida_licencia_bl($(this).val())"/></td>
       <td width="101"></td>
       <td width="234"><input  type="hidden" id="codigo2" class="round" style="width:230px" name="licencia" value="<?php echo $row_RsDocente['lirClave']; ?>"/></td>
     </tr>
    <?php } while ($row_RsDocente = mysql_fetch_assoc($RsDocente));?>
    <?php } ?>


en esta linea llamo a la funcion ajax con el onblur:

1
<input  id="codigo" type="text" class="round" style="width:230px" name="licencia" onChange="valida_licencia_bl($(this).val())"/>

Al dibujar la tabla todas los name quedan con el mismo nombre, por lo cual cuando llamo el onchange solo me funciona en la primera fila de la imagen.

Ajax recibe esto asi:

1
2
codigo = $("#codigo").val();
	  curso = $("#curso").val();

donde #codigo es el nombre de la caja de texto, no sé como hacer para que cada name quede licencia1, licencia2, licencia3, etc y lo otro es que como hago para enviar en el onchange segun correponda la fila de la tabla para que lo capture el ajax.

1
valida_licencia_bl($(this).val(licenci1, codigo1))"

No sé si me hago entender.

Muchas gacias.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

como enviar 'name' en onchange a un ajax

Publicado por xve (6935 intervenciones) el 10/10/2014 08:04:50
Hola David, en el onchange, para enviar el valor del formulario tienes que utilizar únicamente this.value... algo así:

1
... onChange="valida_licencia_bl(this.value)" ...
Esto lo que hace, es enviar a al función valida_licencia_bl el valor que el usuario haya puesto en el <input>


En un mismo formulario no deberían haber nombres repetidos... si lo quieres repetir, tienes que ponerlos como un array de valores... algo así:
1
2
3
<input type="text" name="licencia[]">
<input type="text" name="licencia[]">
...


Espero que esto te responda las dudas... cualquier cosa...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

como enviar 'name' en onchange a un ajax

Publicado por Vainas (262 intervenciones) el 10/10/2014 11:49:06
Buenas:

Comento lo que yo veo que tienes que arreglar:

Los input's si no llevan por defecto el type son de type="text" asi que no esta de mas ponerlo digo yo.

Sigo con lo mismo que dije antes: "En teoria no deberias repetir el id en distintas etiquetas, se supone que identifica solo una etiqueta. puedes usar class en cambio."

Aqui esta mi solucion al problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php } else {
  $i = 0;
		  do { ?>
     <tr>
       <td width="45"> </td>
       <td width="122"><input type="text" id="<?php echo "grado".$1 ?>" class="round" style="width:120px" value="<?php echo $row_RsDocente['Grado']; ?>"/></td>
       <td width="160"></td>
       <td width="182"><input type="text" id="<?php echo "asignatura".$1 ?>" class="round" style="width:180px"  value="<?php echo $row_RsDocente['Asignatura']; ?>"/></td>
       <td width="101"></td>
       <td width="234"><input type="text" id="<?php echo "codigo".$1 ?>" class="round validacion" style="width:230px" name="licencia[]"/></td>
       <td width="101"></td>
       <td width="234"><input  type="hidden" id="<?php echo "codigo_oculto".$1 ?>" class="round" style="width:230px" name="licencia_oculta[]" value="<?php echo $row_RsDocente['lirClave']; ?>"/></td>
     </tr>
    <?php
    $i++;
  } while ($row_RsDocente = mysql_fetch_assoc($RsDocente));?>
    <?php } ?>

fijate que lo unico que he hecho para que no se repitan los id's ha sido agregarle al texto un numero que va cambiando a medida que avanza dentro del bucle "while". Para que quede algo asi:

id="grado0"
id="asignatura0"
id="codigo0"....

id="grado1".... etc etc.

el atributo "name" tambien tiene que ser diferente, pero en este caso hacemos caso a xve y hacemos que sea un array.

Para finalizar el codigo javascript deberia ser algo asi:

1
2
3
4
5
6
7
8
9
10
11
<scritp>
      $(document).ready(function(){
        $(".validacion").change(function() {
          var codigo = $(this).val();
          var asignatura = $(this).prev('input').val();
          var codigo_oculto = $(this).next('input').val();
          ... /el resto de tu codigo
      });
 
    });
</scritp>

Esto viene a ser que cuando se cargue totalmente el html en el cliente asigne a cada input que tiene la clase validacion

<input type="text" id="<?php echo "codigo".$1 ?>" class="round validacion" style="width:230px" name="licencia[]"/>

en su evento onChange la siguiente funcion....

la funcion dentro sabra en que input se encuentra por medio de $(this) y sabiendo en que elemento estamos nos podemos mover con prev o next atras o adelante para obtener los valores que necesitamos.

Espero que sirva de algo, Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

como enviar 'name' en onchange a un ajax

Publicado por Vainas (262 intervenciones) el 10/10/2014 12:46:07
Buenas:

Aqui va otra solucion. Es que he pensado que si no estas tratando los valores en el cliente por que no subes todo al servidor y ya esta?.

El tema quedaria asi:

Quitamos los id's, le dejamos la clase validacion el input que va a comprobar el onChange, metemos cada fila en un formulario que al final es lo que vamos a enviar al servidor, como ahora cada input pertenece a un formulario podemos repetir los nombre en cada formulario. El codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php } else {
  do { ?>
   <tr>
    <form>
     <td width="45"> </td>
     <td width="122"><input type="text" name="grado" class="round" style="width:120px" value="<?php echo $row_RsDocente['Grado']; ?>"/></td>
     <td width="160"></td>
     <td width="182"><input type="text" name="asignatura" class="round" style="width:180px"  value="<?php echo $row_RsDocente['Asignatura']; ?>"/></td>
     <td width="101"></td>
     <td width="234"><input type="text" name="codigo" class="round validacion" style="width:230px"/></td>
     <td width="101"></td>
     <td width="234"><input  type="hidden" name="codigo_oculto" class="round" style="width:230px" value="<?php echo $row_RsDocente['lirClave']; ?>"/></td>
   </tr>
   </form>
    <?php
} while ($row_RsDocente = mysql_fetch_assoc($RsDocente));?>
<?php } ?>

Esto en el cliente nos dara algo asi (resumido):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<form>
  <input type="text" name="grado" class="round" value=""/>
  <input type="text" name="asignatura" class="round" value=""/>
  <input type="text" name="codigo" class="round validacion"/>
  <input  type="hidden" name="codigo_oculto" class="round" value=""/>
</form>
 
<form>
  <input type="text" name="grado" class="round" value=""/>
  <input type="text" name="asignatura" class="round" value=""/>
  <input type="text" name="codigo" class="round validacion"/>
  <input  type="hidden" name="codigo_oculto" class="round" value=""/>
</form>
...

y el javascript quedaria mas simplificado aun:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<scritp>
$(document).ready(function(){
  $(".validacion").change(function() {
    var formulario = $(this).prev('form');
    var dataSerialize = formulario.serialize();
    $.ajax({
      type: "POST",
      url: "secciones/buscar_lic_blink.php",
      data: dataSerialize,
      dataType: "html",
      ...
});
});
</scritp>


Yo creo que con este si :-)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

como enviar 'name' en onchange a un ajax

Publicado por David (38 intervenciones) el 10/10/2014 13:14:12
Hola, muchas gracias por tu respuesta.

La finalidad de la funcion ajax es que cada vez que el usuario ingrese un codigo el valide si existe o no.

Cambie las lineas que dibujan la tabla dinamica asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php } else {
		  do { ?>
     <tr>
       <td width="45"> </td>
       <td width="122"><input  id="grado" class="round" style="width:120px" name="curso<?php echo $row_RsDocente['lirId']; ?>" value="<?php echo $row_RsDocente['Grado']; ?>"/></td>
       <td width="160"></td>
       <td width="182"><input id="asignatura" class="round" style="width:180px"  value="<?php echo $row_RsDocente['Asignatura']; ?>"/></td>
       <td width="101"></td>
       <td width="234"><input  id="codigo" type="text" class="round" style="width:230px" name="licencia<?php echo $row_RsDocente['lirId']; ?>" onChange="valida_licencia_bl($(this).val())"/></td>
       <td width="101"></td>
       <td width="234"><input  type="hidden" id="codigo2" class="round" style="width:230px" value="<?php echo $row_RsDocente['lirClave']; ?>"/></td>
     </tr>
    <?php } while ($row_RsDocente = mysql_fetch_assoc($RsDocente));?>


El formulario quedaria con los suguientes valores segun me muestra mozilla:

eliminar4

Ya cada caja de texto es unica, tu me indicas que envie todo el formulario pero como te indico solo quiero enviar la linea de codigo en la cual el usuario esta ingresando los valores.

Es decir, el usuario ingresa la primer licencia y el ajax responde que es valida, entonces el usuario ingresara la segunda y asi sucesivamente.


Sin embargo voy a hacer lo que me dices haber si me arroja lo que necestio



eliminar5

No se si estos ultimos datos que te cuento sirvan para algo en lo que me puedas ayudar.

Muchas gracuas

DavidC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar