Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Select, option, varios campos

Estas en el tema de Select, option, varios campos en el foro de Javascript en Foros del Web. Tengo un select que recoge los valores de una consulta a una tabla clientes. El select recoge el value y el texto. Value identifica, en ...
  #1 (permalink)  
Antiguo 09/05/2015, 11:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Select, option, varios campos

Tengo un select que recoge los valores de una consulta a una tabla clientes.
El select recoge el value y el texto.
Value identifica, en la tabla cliente el Id del Cliente.
El texto recoge apellido del cliente.
Hay un campo en la tabla que contiene el mail del cliente.
Pregunta:
Se puede incluir en el option del Select otros campos que estén disponibles para posteriores acciones, pero que no sean visibles en el Select.
Concretamente quiero disponer de la dirección de correo electrónico del cliente, para poder incluir en la funcion maito.

Este es el código actual.

Código Javascript:
Ver original
  1. <select id="3" class="tx"  
  2. <?php if($var_atributos ==0){echo "disabled";} else{echo "enabled";}?> name="txtape" value="">
  3. <option value= "<?php echo $var3id ?>"><?php echo $var3 ?></option>
  4. <?php
  5. while ($fila=mysqli_fetch_row($resultape))                                 
  6.     {
  7.     echo "<option value  ='".$fila['0']."'>".$fila['1']."</option>";
  8.     echo "<$var3id value ='".$fila['0']."' ";
  9.     }
  10. ?>
  11. </select>

Podría incluir mas elementos del array $fila[], pero serían visibles y no quiero que se vean.
Código PHP:
Ver original
  1. echo "<option value  ='".$fila['0']."'>".$fila['1'].$fila['2'] "</option>";
  #2 (permalink)  
Antiguo 09/05/2015, 17:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select, option, varios campos

Se me ocurre que asignes a cada opción un atributo personalizado con el respectivo correo electrónico y al final del <select>, añade un campo oculto en el cual cargaremos el correo electrónica de la opción seleccionada, luego, cuando se produzca el evento change en el <select>, ejecutarás una función en la que tomarás el correo electrónico guardado en el atributo personalizado de la opción seleccionada y lo asignarás al campo oculto.

Un ejemplo:
Código HTML:
Ver original
  1. <select onchange = "asignar(this.options[this.selectedIndex].dataset.email)">
  2.     <option value = "opc1" data-email = "[email protected]">Primera opción</option>
  3.     <option value = "opc2" data-email = "[email protected]">Segunda opción</option>
  4.     <option value = "opc3" data-email = "[email protected]">Tercera opción</option>
  5.  
  6. <input type = "hidden" id = "oculto" />

Código Javascript:
Ver original
  1. function asignar(email){
  2.     document.querySelector("#oculto").value = email;
  3. }

Esto es lo que envío como parámetro a la función:
  • this: Hace referencia al <select>.
  • options: Representa al conjunto de opciones del <select>.
  • selectedIndex: Es el índice de la opción seleccionada dentro del conjunto de opciones. El primero es 0.
  • dataset: Atributo con el cual puedo obtener el valor de un atributo personalizado. Más información.
  • email: El nombre del atributo personalizado

Saludos
__________________
«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
  #3 (permalink)  
Antiguo 10/05/2015, 12:06
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Select, option, varios campos

Hola Alexis:
Gracias por tu respuesta.
Mis conocimientos de programación vienen de VBA.
Ahí tenemos la opción de incluir en un campo una consulta de selección de incluye varios campos. Y en el select sólo es visible el valor del campo que queremos, estando el resto disponibles para extraer de ellos los valores que queremos ya que actua como un array.
En html por lo que veo el select sólo contempla dos valores value y texto.
Con el desarrollo que me has proporcionado supongo que debo incluir en la tabla un campo que será posteriormente el id="oculto" y que recogerá el valor del email
La pregunta viene por saber si en html el select permite también esta opción pero no he encontrado nada referido a ello.
  #4 (permalink)  
Antiguo 10/05/2015, 12:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select, option, varios campos

¿Te refieres a si puedes o no añadir atributos personalizados?

Pues, sí. Es una de las novedades del estándar HTML5 y puedes añadirlos a cualquier elemento HTML. Incluso puede ser más de uno.

Saludos
__________________
«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
  #5 (permalink)  
Antiguo 10/05/2015, 13:28
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Select, option, varios campos

Estoy haciendo una prueba para obtener el valor que le asigno al atributo.
La respuesta que obtengo con el alert es undefined.
El código es:

La función que debe indicarme el valor del atributo:

Código Javascript:
Ver original
  1. function prueba()
  2.         {
  3.             var mail = document.getElementById('3').dataset.email;
  4.             alert(mail);
  5.         }

El codigo del select donde he insertado data-email
Código HTML:
Ver original
  1. <select id="3" class="tx"  
  2.                          <?php if($var_atributos ==0){echo "disabled";} else{echo "enabled";}?> name="txtape" value="" onclick="prueba()">
  3.                             <option value= "<?php echo $var3id ?>" data-email ="mimail"><?php echo $var3 ?></option>
  4.                             <?php
  5.                                 while ($fila=mysqli_fetch_row($resultape))                                 
  6.                                 {
  7.                                     echo "<option value  ='".$fila['0']."'>".$fila['1']."</option>";
  8.                                     echo "<$var3id value ='".$fila['0']."' ";
  9.                                 }
  10.                             ?>
  11.                         </select>

Como he comentado alert responde undefined
  #6 (permalink)  
Antiguo 10/05/2015, 13:31
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Select, option, varios campos

Estás obteniendo el select y no el option.
  #7 (permalink)  
Antiguo 10/05/2015, 13:44
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select, option, varios campos

¿Por qué no envías el parámetro a la función como te lo indiqué? Además, no estás creando el atributo personalizado para las opciones que se generan en el bucle. Corrige eso.

Saludos
__________________
«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 11/05/2015, 09:22
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Select, option, varios campos

Hola:
Gracias a ambos.
PHPeros:
Cita:
Estás obteniendo el select y no el option.
Sí. En efecto. Lo que pretendo posteriormente es que cuando envíe un mail, el dato que debe capturar es el que hay en ese momento en el SELECT y no en la opción.
Aunque naturalmente el option posteriormente incorporará el dato de la consulta como un elemento más del array.

Alexis88:
Con el ejemplo que he pasado estaba intentando trasladar a una prueba básica la lectura del atributo para verlo en un alert.
He probado con alert(elemento.dataset.mail) y daba undefined.
He intentado comprender el concepto buscando por internet y aplicando en lugar de dataset getAttribute. Así lo único que he conseguido es que el valor devuelto sea 'null'.
Finalmente he trasladado el código que me has pasado a un script y realizado la prueba y en el campo que debería recoger el valor del atributo obtengo "undefined".

PD: Tardo en responder por la disponibilidad que tengo de trabajo. Disculpad y gracias de nuevo,
  #9 (permalink)  
Antiguo 11/05/2015, 09:28
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Select, option, varios campos

Disculpas Alexis88:
Tú codigo funciona bien en el script.
Me había dejado atrás una letra al referenciar el atributo.
Sigo implementando tu codigo para obtener el resultado esperado.
Respondo más tarde con el resultado.
Gracias de nuevo.
  #10 (permalink)  
Antiguo 16/05/2015, 12:35
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Select, option, varios campos

Hola:
Os dejo el código una vez desarrollado el atributo personalizado.
Código PHP:
Ver original
  1. <select id="3" class="tx"  
  2. <?php if($var_atributos ==0){echo "disabled";} else{echo "enabled";}?> name="txtape" value="">
  3. <option value= "<?php echo $var3id ?>" data-email ="<?php echo $var3mail ?>"><?php echo $var3 ?></option>
  4. <?php
  5. while ($fila=mysqli_fetch_row($resultape))                                 
  6.   {
  7.   echo "<option value  ='".$fila['0']."'data-email = '".$fila['2']."'>".$fila['1']."</option>";
  8.   echo "<$var3id value ='".$fila['0']."' ";
  9.    }
  10.   ?>
  11. </select>

Alexis88 y PHPeros. A ambos mi agradecimiento.
Un saludo.
  #11 (permalink)  
Antiguo 06/08/2015, 14:09
 
Fecha de Ingreso: agosto-2015
Mensajes: 1
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Select, option, varios campos

hola , algo tarde pero intentaré explicarme rapido.
Será mas fácil si crear un arreglo donde almacenes los campos extras que quieras, en este caso el correo, etc. y que tu posición sea el valor de cada option en el select, asi seria fácil recuperarlo ( función recuperarCorreo), mira algo asi:

Código PHP:
<select id="3" class="tx"  
<?php if($var_atributos ==0){echo "disabled";} else{echo "enabled";}?> name="txtape" value="">
<option value= "<?php echo $var3id ?>"><?php echo $var3 ?></option>
<?php
echo "<script>var tablaClientes=[];</script>";
while (
$fila=mysqli_fetch_row($resultape))                                  
    {
        
//$fila['0']=idClinte , $fila['2']=mail
        //Guardas los correos en una variable de java script en un arreglo donde la posicion sea el idCliente
    
echo "<script> tablaClientes[".$fila['0']."]='".$fila['2'] ."';</script>";
    echo 
"<option value  ='".$fila['0']."'>".$fila['1']."</option>";
    echo 
"<$var3id value ='".$fila['0']."' ";
    }
?>
</select>
<script>
    function recuperarCorreo(ClienteID){
        return tablaClientes[ClienteID];
        }
</script>
  #12 (permalink)  
Antiguo 06/08/2015, 15:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select, option, varios campos

Aunque funcione, no recomiendo mezclar PHP con JavaScript, el código queda muy sucio y desordenado. Si se desea interactuar con ambos lenguajes, se puede echar mano de Ajax.

No existe el atributo enabled. Para habilitar un elemento inhabilitado, se le asigna el valor booleano false al atributo disabled.

Creo que en lugar de ser una forma "más fácil", termina siendo todo lo contrario.

Saludos
__________________
«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

Etiquetas: campos, funcion, option, php, select, valor
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 21:47.