Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Ejecutar funcion JS en inputs con el mismo id

Estas en el tema de Ejecutar funcion JS en inputs con el mismo id en el foro de Javascript en Foros del Web. No puedo llamar a la función varias veces para hacer cálculos, esto haciendo conexión con bd, pero dejo el siguiente ejemplo para explicar lo que ...
  #1 (permalink)  
Antiguo 02/03/2016, 02:11
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Ejecutar funcion JS en inputs con el mismo id

No puedo llamar a la función varias veces para hacer cálculos, esto haciendo conexión con bd, pero dejo el siguiente ejemplo para explicar lo que necesito.

Esta es un calculadora, como ven llamo a una función js para tomar los valores de los inputs y luego devuelvo un resultado, el problema es que esto solo funciona en la primera linea, luego no se ejecuta la asignación de valores. Por favor acepto sugerencias para una solución

JS
function prueba()
{
var uno = document.getElementById('uno').value;
var dos = document.getElementById('dos').value;
var suma = parseInt(uno) + parseInt(dos);
document.getElementById('tres').value = suma;
}

HTML PHP

<table>
<thead>
<tr>
<td>Numero 1</td>
<td>Numero 2</td>
<td>Resultado</td>
</tr>
</thead>
<tbody>
<?php
for ($i=0; $i < 10 ; $i++) {
# code...

?>
<tr>
<td><input type="text" placeholder="0.0" id="uno" value="0" onKeyUp="prueba()"></td>
<td><input type="text" placeholder="0.0" id="dos" value="0" onKeyUp="prueba()"></td>
<td><input type="text" placeholder="0.0" id="tres" value="0" onKeyUp="prueba()"></td>
</tr>
<?php } ?>
</tbody>
</table>
  #2 (permalink)  
Antiguo 02/03/2016, 10:51
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Ejecutar funcion JS en inputs con el mismo id

la consola dice algo?
  #3 (permalink)  
Antiguo 02/03/2016, 10:52
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Ejecutar funcion JS en inputs con el mismo id

estoy viendo que esos campos están en tuna tabla, se repiten los ids en cada tr?
  #4 (permalink)  
Antiguo 02/03/2016, 11:52
Avatar de Pantera80  
Fecha de Ingreso: noviembre-2014
Ubicación: España
Mensajes: 35
Antigüedad: 9 años, 5 meses
Puntos: 6
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Código:
<td><input type="text" placeholder="0.0" id="uno" value="0" onKeyUp="prueba()"></td>
<td><input type="text" placeholder="0.0" id="dos" value="0" onKeyUp="prueba()"></td>
<td><input type="text" placeholder="0.0" id="tres" value="0" onKeyUp="prueba()"></td>
Creo que el problema es que llamas a la función prueba() cada vez que alguien introduce un dato en el input uno y dos

Deberías dejarlo solo en el campo dos, sino cuando introduzcas el primer valor ya no cogerá el segundo:

Código:
<td><input type="text" placeholder="0.0" id="uno" value="0" ></td>
<td><input type="text" placeholder="0.0" id="dos" value="0" onKeyUp="prueba()"></td>
<td><input type="text" placeholder="0.0" id="tres" value="0" ></td>
  #5 (permalink)  
Antiguo 02/03/2016, 12:26
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Ejecutar funcion JS en inputs con el mismo id

El problema es por que creas N input llamado UNO, DOS, TRES por lo que tu función no sabe que valor tomar... de hecho a partir del segundo input tu función prueba siempre tomará los valores del primer UNO y DOS...
  #6 (permalink)  
Antiguo 03/03/2016, 13:32
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Cita:
Iniciado por juanito1712 Ver Mensaje
la consola dice algo?
No, no sale ningún error
  #7 (permalink)  
Antiguo 03/03/2016, 13:34
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Cita:
Iniciado por juanito1712 Ver Mensaje
estoy viendo que esos campos están en tuna tabla, se repiten los ids en cada tr?
Si lo se, ese es precisamente mi problema, quiero saber que alternativas tengo.
Llevandolo a mi proyecto tengo un tabla X que tiene N cantidad de items, estos items tienen relacion con un detalle, por lo que debo listarlos todos, luego el usuario agrega datos que se caulculan y se enviaran.
  #8 (permalink)  
Antiguo 03/03/2016, 13:46
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Todos me ha dicho mas omenos lo mismo y estoy de acuerdo, el problema debe ser que tengo los mismos ids, y como lo que ejecuto es un bucle js no debe saber como interpretar al momento de ejecutar la funcion, ahora que alternativas tengo.

Lo que quiero es poder en un formulario con X cantidad de items poder ir metiendo datos y que estos se calculen internamente y se asignen a las cajas para que yo baya viendo los resultados. Básicamente estoy haciendo un sistema que agarra los productos y luego pide datos para que se hagan proyecciones sobre compras, margenes de ganancia etc. Entonces como necesito que el calculo se haga al momento de ingresar el dato use como en el ejemplo una función que se llama por medio de onKeyUp. Funciona tal cual lo necesito, el problema es que como hay un bucle que lista todos los productos el js deja de funcionar y eso es lo que necesito solucionar.
  #9 (permalink)  
Antiguo 03/03/2016, 14:04
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Dentro del FOR crea una forma en que tus input estén relacionados... me explico

Cada vez que estas en el bucle creas 3 input si?
Puedes crear una clase o un name que te indique que los 3 están relacionado no sé pueden tener clase "input1" donde ese 1 se incrementa según el for, después creas la función así

Código Javascript:
Ver original
  1. onKeyUp="prueba(this)"

y ya sabrás qué input fue el que llamó a la función y que nombre o clase tiene... es solo una idea xD
  #10 (permalink)  
Antiguo 03/03/2016, 14:08
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Hola ZedGe1505 muchas gracias por la sugerencia pero no me queda del todo claro, podrías pasarme un ejemplo rapido con mi otro ejemplo de la calculadora, si solucionamos que la calculadora funcione estamos del otro lado, saludos.
  #11 (permalink)  
Antiguo 03/03/2016, 14:11
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Cita:
Iniciado por juanito1712 Ver Mensaje
estoy viendo que esos campos están en tuna tabla, se repiten los ids en cada tr?

Hola ZedGe1505 muchas gracias por la sugerencia pero no me queda del todo claro, podrías pasarme un ejemplo rapido con mi otro ejemplo de la calculadora, si solucionamos que la calculadora funcione estamos del otro lado, saludos.
  #12 (permalink)  
Antiguo 03/03/2016, 14:32
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Ejecutar funcion JS en inputs con el mismo id

como bien te están diciendo, al tener el ids repetidos, javascript solo es capaz de encontrar los datos del primero, ya que no espera que se repita ese atributo. Una solucion a eso es la siguiente


<?
for(x=0;x<10;x++){
echo '<input type="text" id="elemento'.$x.'" onkeyup="hazloquesea('.$x.')">';
}
?>
<script>
function hazloquesea(elem){
console.log(document.getElementById('elemento'+ele m).value);
}
</script>

y recuerda, un Id jamás se puede repetir
  #13 (permalink)  
Antiguo 03/03/2016, 14:39
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Prueba esto



Código HTML:
Ver original
  1. <tr>
  2. <td>Numero 1</td>
  3. <td>Numero 2</td>
  4. <td>Resultado</td>
  5. </tr>
  6. </thead>
  7. <tr>
  8. <td><input type="text" placeholder="0.0" id="uno" class="input1" value="0" onKeyUp="prueba(this)"></td>
  9. <td><input type="text" placeholder="0.0" id="dos" class="input1a" value="0" onKeyUp="prueba(this)"></td>
  10. <td><input type="text" placeholder="0.0" id="tres" class="input1b" value="0" onKeyUp="prueba(this)"></td>
  11. </tr>
  12. <tr>
  13. <td><input type="text" placeholder="0.0" id="uno" class="input2" value="0" onKeyUp="prueba(this)"></td>
  14. <td><input type="text" placeholder="0.0" id="dos" class="input2a" value="0" onKeyUp="prueba(this)"></td>
  15. <td><input type="text" placeholder="0.0" id="tres" class="input2b" value="0" onKeyUp="prueba(this)"></td>
  16. </tr>
  17. </tbody>


Código Javascript:
Ver original
  1. function prueba(valorInput){
  2.     //Obtienes la clase que genera el evento, sin contar la ultima letra
  3.   var clase = valorInput.className.substring(0,6);
  4.     //obtienes valor de los input correspondientes
  5.   var y = document.getElementsByClassName(clase)[0].value;
  6.   var z = document.getElementsByClassName(clase+'a')[0].value;
  7.   //escribes el resultado
  8.   document.getElementsByClassName(clase+'b')[0].value = parseInt(y)+parseInt(z);
  9.  
  10. }


es solo un ejemplo y debe de haber una opción mucho más limpia pero es lo que se me ocurre a la rápida y siendo un programador medio xD
  #14 (permalink)  
Antiguo 06/03/2016, 08:23
 
Fecha de Ingreso: marzo-2016
Ubicación: Bolivia
Mensajes: 7
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Ejecutar funcion JS en inputs con el mismo id

Gracias a todo y a ti ZedGe1505 tome tu ejemplo y lo adapte a mi proyecto, con la pequeña variacion gracias a todossssssss

Etiquetas: funcion, html, input, inputs, js, php, 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 06:44.