Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Poner variable donde no la hay

Estas en el tema de Poner variable donde no la hay en el foro de Javascript en Foros del Web. Hola, Quiero aplicar una función mediante onchange a un input en caso de cambio, lo cual es bien simple, pero, he aquí el problema, se ...
  #1 (permalink)  
Antiguo 12/11/2016, 05:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Poner variable donde no la hay

Hola,

Quiero aplicar una función mediante onchange a un input en caso de cambio, lo cual es bien simple, pero, he aquí el problema, se trata de que existen diversos inputs en diversas circunstancias y páginas. Así que se me ha ocurrido que lo mejor es insertar la variable allá donde sea necesaria para que funcione al cargarse la página. Es decir, se carga la página, y si existen inputs con un id determinado, se les añade la variable para que produzca el cambio deseado en caso de actuación por parte del usuario.

Los inputs que precisan la variable ya están identificados, así que, poniéndolo simple, se tratar de introducir:

onchange="elonchage(this);"

en un campo identificado ya a través del id, pasando de

Código:
<input id="elinput">
a

Código:
<input id="elinput" onchange="elonchage(this);">
¿Se puede?

Gracias.
  #2 (permalink)  
Antiguo 12/11/2016, 07:02
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Poner variable donde no la hay

No. Para asignar un evento en línea, este ha de estar en el html. La manera de asignar eventos es con addEventListener(). Como estás usando ids y no pueden estar repetidas, no veo el problema. Quizás no he comprendido tu consulta
  #3 (permalink)  
Antiguo 12/11/2016, 07:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

Hola.

Lo he conseguido así:

Código:
 var x = document.getElementById("elinput"); 
x.setAttribute("onchange", "elonchage(this);");
Pero como soy nuevo en esto podría no ser la solución más adecuada.

¿Qué os parece?

Gracias.
  #4 (permalink)  
Antiguo 12/11/2016, 07:51
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Poner variable donde no la hay

No es la más adecuada. Como te dije anteriormente, la manera correcta es usando addEventListener()
Código Javascript:
Ver original
  1. document.querySelector('#elinput').addEventListener('change', function() {elonchage(this)}, false);
.

Por otro lado, el evento onchange, no es el más adecuado para un campo input puesto que no se disparará hasta que pierda el foco (onblur)
  #5 (permalink)  
Antiguo 12/11/2016, 12:09
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: Poner variable donde no la hay

Si son varios los elementos que deben ser afectados por el evento en cuestión, puedes asignarles la misma clase o quizá encontrar un dato identificador que sea similar en todos ellos y así registrar el evento globalmente para luego pasar a identificar al elemento directamente afectado por el evento, comprobar que posea la clase o dato identificador en común entre los elementos y, finalmente, ejecutar la función.

Código Javascript:
Ver original
  1. document.addEventListener("change", function(event){
  2.     event.target.className == "ejemplo" && elonchage(event.target);
  3. }, false);

En donde event.target es el elemento directamente afectado por el evento. De esta manera, puedes tener uno o muchos elementos que, al tener la clase en cuestión, serán afectados de igual forma. La mayor ventaja de delegar el evento es que incluso funciona con elementos añadidos dinámicamente (después de la carga del documento).

__________________
«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 12/11/2016, 15:08
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

Cita:
Iniciado por mpozo Ver Mensaje
No es la más adecuada. Como te dije anteriormente, la manera correcta es usando addEventListener()
Código Javascript:
Ver original
  1. document.querySelector('#elinput').addEventListener('change', function() {elonchage(this)}, false);
.
Dejando a un lado el tema del input, te indico que esto no me ha funcionado. No inserta nada.

Además, soy nuevo y no me gustaría hacer las cosas sin entenderlas, y para contribuir a enriquecer el foro y a personas que como yo busquen este tipo de soluciones desde un conocimiento básico, me gustaría saber por qué es addEventListener() la forma más adecuada, y no la solución que puse inicialmente.

  #7 (permalink)  
Antiguo 12/11/2016, 15:10
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

Cita:
Iniciado por Alexis88 Ver Mensaje
Si son varios los elementos que deben ser afectados por el evento en cuestión, puedes asignarles la misma clase ....

No lo he dicho, pero estos distintos elemenos están en distintas secciones a lo largo del sitio. No importa la case. Sólo hay uno por página. Esto no es problema. Pero gracias por la respuesta.
  #8 (permalink)  
Antiguo 12/11/2016, 15:13
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

Otra cosa, según tengo leído addEventListener() no es aceptado por internet explorer 8, lo cual es prohibitivo. Necesito cubrir todos los navegadores sin excepción. No es un tema de estilo precisamente.

Gracias
  #9 (permalink)  
Antiguo 12/11/2016, 15:28
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

Disculpad,

Código:
document.querySelector('#elinput').addEventListener('change', function() {elonchage(this)}, false);
Sí funciona.

Pero, como dije, he comprobado que no lo hace en IE 8 y no puedo permitírmelo.

¿He investigado y leído sobre addEventListener y veo lo que es, pero necesito que funcione también en IE8 o tendré que buscar otra cosa o quedarme con el inicial.

attachEvent?

Esto me funciona en todo menos en IE8:

Código:
if (document.addEventListener) {                
document.querySelector('#elinput').addEventListener('change', function() {elonchage(this)}, false);
} else if (document.attachEvent) {     
document.querySelector('#elinput').attachEvent('change', function() {elonchage(this)}, false);        
}

Última edición por JUMASOL; 12/11/2016 a las 15:41
  #10 (permalink)  
Antiguo 12/11/2016, 15:46
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Poner variable donde no la hay

Cita:
Iniciado por JUMASOL Ver Mensaje
Dejando a un lado el tema del input, te indico que esto no me ha funcionado. No inserta nada.
Algo has de estar haciendo mal

Cita:
Iniciado por JUMASOL Ver Mensaje
Otra cosa, según tengo leído addEventListener() no es aceptado por internet explorer 8, lo cual es prohibitivo. Necesito cubrir todos los navegadores sin excepción. No es un tema de estilo precisamente.

Gracias
Lee esto y esto otro. Con ello solventarás tus dudas

Edito: Encontrastes la respuesta solo
  #11 (permalink)  
Antiguo 12/11/2016, 16: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: Poner variable donde no la hay

Cita:
Iniciado por JUMASOL Ver Mensaje
Esto me funciona en todo menos en IE8:

Código:
if (document.addEventListener) {                
document.querySelector('#elinput').addEventListener('change', function() {elonchage(this)}, false);
} else if (document.attachEvent) {     
document.querySelector('#elinput').attachEvent('change', function() {elonchage(this)}, false);        
}
El método .attachEvent() no requiere de un tercer argumento para determinar si se saltará o no la fase de captura; además, el nombre del evento debe tener un "on" al inicio:
Código Javascript:
Ver original
  1. document.querySelector('#elinput').attachEvent("onchange", elonchage);

Por cierto, en el caso de usar solo el método .addEventListener(), estableciendo el nombre de la función como segundo argumento (listener o callback), no es necesario pasarle el this como argumento ya que, el elemento en el cual se registró el evento (document.querySelector('#elinput')), puede ser accedido a través de dicha palabra reservada en el contexto de la función:
Código Javascript:
Ver original
  1. document.querySelector('#elinput').addEventListener("change", elonchage, false);
  2.  
  3. function elonchage(){
  4.     console.log(this); //document.querySelector('#elinput')
  5. }

Por cierto, se recomienda usar solo el método .addEventListener() ya que es más completo, en cuanto a las características que posee, sobre los métodos antecesores; además de contar con soporte por parte de la mayoría de navegadores modernos. Para evitar problemas de incompatibilidad con navegadores antiguos, puedes implementar este polyfill.

__________________
«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; 12/11/2016 a las 16:28 Razón: Event name
  #12 (permalink)  
Antiguo 12/11/2016, 16:43
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

He probado pero no me funciona en IE8, tal y como lo usas:

Código:
document.querySelector('#elinput').attachEvent("onchange", elonchage);
  #13 (permalink)  
Antiguo 12/11/2016, 17:11
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: Poner variable donde no la hay

Inténtalo de la otra forma:
Código Javascript:
Ver original
  1. document.querySelector('#elinput').attachEvent("onchange", function(){
  2.     elonchage(document.querySelector('#elinput'));
  3. });
__________________
«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; 12/11/2016 a las 17:44 Razón: Argument
  #14 (permalink)  
Antiguo 13/11/2016, 05:27
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Poner variable donde no la hay

Ahora sí, todo correcto.

Todo estoy supera mis posibilidades claramente.

Mucha gracias.

Etiquetas: funcion, input, variable
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 15:30.