Foros del Web » Programando para Internet » Javascript »

Cambiar valor del textbox que tenga el foco

Estas en el tema de Cambiar valor del textbox que tenga el foco en el foro de Javascript en Foros del Web. Hola a todos, tengo un problema, me gustaría modificar el valor del textbox que tenga el foco. ¿Hay alguna función que me permita obtener el ...
  #1 (permalink)  
Antiguo 13/07/2011, 09:39
zant95
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Cambiar valor del textbox que tenga el foco

Hola a todos, tengo un problema, me gustaría modificar el valor del textbox que tenga el foco.
¿Hay alguna función que me permita obtener el elemento actual que tenga el foco?
  #2 (permalink)  
Antiguo 13/07/2011, 10:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Cambiar valor del textbox que tenga el foco

no he visto mucha información al respecto, quizás te ayude este hilo: http://stackoverflow.com/questions/4...ment-has-focus
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 13/07/2011, 16:58
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

He probado las posibles soluciones que dan en ese hilo y no me funcionan, me interesa que sea compatible en Google Chrome, ya que es para una extensión de este.
  #4 (permalink)  
Antiguo 13/07/2011, 17:10
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Cambiar valor del textbox que tenga el foco

Veamos, si recorres todos los input y les asignas el evento onfocus, luego puedes comprobar cuál es el input que tiene el foco en ese momento. Si le pasas event como argumento a la función, puedes usar la propiedad target, que es la que almacena el objeto afectado por el evento. Como de costumbre, hay problemas de compatibilidad, así que hay varias propiedades, todo esto lo puedes ver mejor en quirksmode porque ahora mismo no me acuerdo de mucho
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #5 (permalink)  
Antiguo 13/07/2011, 20:25
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

Las páginas que modifico no son mías, es una extensión para Chrome, por lo que muchas tendrán ya asignados elementos onfocus, por lo que no podría reemplazarlos sino añadir al final de cada una la función que quiero (eso es fácil), pero claro, unas tienen onfocus="funcion();" y otras onfocus="funcion()", por lo que tendría que detectar si acaban ya en ";" y como las webs son dinámicas, aparecen y desaparecen nuevos elementos sin recargarlas, tendría que añadir mi función mediante un setInterval, lo que me llevaría a también detectar si ya he añadido mi función antes.

¿Esa es la forma más sencilla o se les ocurre otras?
¿Cómo podría recorrer todo el documento en busca de inputs de texto?

La idea de cómo sería la función la he sacado de este post de JavierB.

Saludos.

EDITO:
En vez de un setInterval creo que sería mejor añadir también al onfocus la función que recorre el documento en busca de inputs de texto.

EDITO 2:
Como bien dije antes las páginas son dinámicas, así que no me basta con que mi función se ejecute al principio y después cuando cada texto obtenga el foco, ya que puede que al principio de carga no haya ningún input de texto y la función no se vuelva a ejecutar, así que tengo que recurrir a mi primera idea, el setInterval, o bien puedo agregar al body el evento onclick para que ejecute mi función ¿qué me recomiendan?

Ya sé que puede que haya un input con el foco ya definido y el usuario no tenga que hacer clic para escribir en él, pero cuando quiero que realmente funcione es cuando el usuario haga clic derecho para usar el menú contextual ¿ustedes saben si existe un evento estándar tipo onrightclic?
Es que si existe que me quito de rollos como el setInterval o el body.onload con un onrightclic me bastaría.

¿Si el usuario tiene el foco y el ratón encima de ese input no sirve el this.value? ;)

Última edición por zant95; 13/07/2011 a las 20:44
  #6 (permalink)  
Antiguo 14/07/2011, 03:39
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Cambiar valor del textbox que tenga el foco

Bufff cuántas preguntas en un mismo post. Aver si puedo contestarlas todas.
Lo primero de todo es que algo como esto:
Código:
elemento.onfocus = function(){ ... };
elemento.onfocus; // "function(){ ... };"
No es cierto. Eso te devolvería un handler, o sea, una referencia a la función que asignaste.
Lo de asignar los eventos, lo puedes hacer mediante el Model Event level 2, es decir, usando attachEvent/addEventListener. Esto hace que puedas añadir las funciones que quieras a un mismo evento sin que estas se "pisen".
Lo de asignar los eventos a todos los inputs, aunque sean dinámicos, sinceramente no estoy seguro, podrías usar un setInterval, pero no es una solución limpia ni adecuada. Sé que jQuery tiene una función live, pero no me he parado a ver cómo funciona.
Por último, el evento que buscas es oncontextmenu.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 14/07/2011, 04:10
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

Interesantes tus respuestas, me han ayudado bastante, yo me pensaba que tenía que obtener los valores de los onfocus y usar una función replace, pero me has ahorrado bastante tiempo.
Pondré en práctica tus soluciones y veré si lo soluciono.

PD: prometo postear todo el código cuando lo termine ;)
  #8 (permalink)  
Antiguo 14/07/2011, 05:10
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Cambiar valor del textbox que tenga el foco

Por cierto, esto era a lo que me refería con target y otras propiedades
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 14/07/2011, 05:45
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

He hecho esta función y me va bien:

Código Javascript:
Ver original
  1. var focusId;
  2. function findFocus(element) {
  3.     focusId = element;
  4. }
  5. function addFocus() {
  6.     var inputs = document.getElementsByTagName('input');
  7.     for (var i = 0; inputs.length > i; i++) {
  8.         var typeVal = inputs[i].getAttribute("type");
  9.         if (typeVal == 'text') {
  10.             inputs[i].addEventListener("focus", function(){findFocus(this.id);addFocus()}, false);
  11.         }
  12.     }
  13. }
  14. document.body.addEventListener("contextmenu", function(){addFocus()}, false)

El único problema es que me da error en la última línea al asignar la propiedad contextmenu al body.
Pero si ejecuto la función manualmente es capaz de decirme el id del último input con el foco.
Eso sí, todos los input no tienen por qué tener id y el fin de todo esto es agregar un fragmento de texto al último input con el foco.
¿Algunas soluciones para solventar estos dos problemas o mejorar el código?
  #10 (permalink)  
Antiguo 14/07/2011, 14:44
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

Haciendo uso de las API's para extensiones de Google y las funciones anteriores he solventado esto, pero el problema es que uso el atributo id para identificar los elementos, y no todos los input tienen por qué tener id, así que ¿hay alguna forma más genérica de identificar a un elemento? ¿por nodos se podría?

Lo que he intentado es usar solo "this" y pasarlo a una variable en lugar de "this.id" y después intento obtener el atributo value en otra función, pero obtengo un "object HTMLInputElement".
  #11 (permalink)  
Antiguo 14/07/2011, 18:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Cambiar valor del textbox que tenga el foco

buenas,
queria agregar un detalle. no tienes porque recorrer por todos los elementos para registrar el evento. una de las características del modelo de evento es que los eventos se propagan. esta característica te permite registrar un solo evento para multiples elementos. por ejemplo en tu caso, puedes registrar el tipo de evento focus en body. luego en el handler tocaría determinar si el elemento que inicio el evento es de nuestro interes mediante event.target. mas informacion acerca del modelo de evento:
http://kusor.net/traducciones/brainj...vents1.es.html
http://www.w3.org/TR/DOM-Level-2-Eve...l#Events-Event
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 14/07/2011 a las 18:18
  #12 (permalink)  
Antiguo 14/07/2011, 18:48
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

He estado revisando los artículos pero no he entendido cómo podría agregar de esa manera un evento a todos los elementos con determinada etiqueta, y cómo podría hacer referencia a un elemento sin tener su id.

Como dije antes he probado añadiendo "this" en vez de "this.id" al evento y pasarlo a una función, pero a la hora de cambiar el valor la consola de Javascript me da error porque ese objeto no tiene ese método.

Es decir, en vez de pasar a la función el "this.id" y luego usar "document.getElementById(focusId).value" lo que he intentado ha sido pasarle solo el "this" y usar "focusId.value".

NOTA: "focusId" es un argumento de la función.
  #13 (permalink)  
Antiguo 14/07/2011, 19:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Cambiar valor del textbox que tenga el foco

revisa este tema, http://www.forosdelweb.com/showthread.php?t=726818.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 15/07/2011, 05:14
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

He leído el código que pusiste al final de ese hilo y me has dado una idea.
Cuando el elemento tiene el foco le añado una id única y luego ya tengo una referencia para cambiar el valor del input.

Eso sí ¿un mismo elemento puede tener varias id's separadas por espacios al igual que las clases?
  #15 (permalink)  
Antiguo 15/07/2011, 05:38
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Cambiar valor del textbox que tenga el foco

No, un id no puede tener espacios. Aquí encontrarás la regla de nombres para ese atributo:
http://www.w3schools.com/tags/att_standard_id.asp
Además te sugiero revises el enlace sugerido por zerokilled para obtener el elemento target del evento en lugar la estrategia (mucho más costosa) que proponés en tu último post.
  #16 (permalink)  
Antiguo 15/07/2011, 21:03
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar valor del textbox que tenga el foco

Gracias a los tres he conseguido solucionar el problema, esta es la función:

Código Javascript:
Ver original
  1. var thisText;
  2.  
  3. function insertCode(data) {
  4.     thisText.value = thisText.value+'!'+data+'!';
  5. }
  6.  
  7. window.oncontextmenu = function(evt) {
  8.     var evt = evt || event, elem = evt.target || evt.srcElement; // DOM || IE;
  9.     if(/input/i.test(elem.nodeName) && /text/.test(elem.type) || /textarea/i.test(elem.nodeName))
  10.     return thisText = elem;
  11. }
  12.  
  13. chrome.extension.onRequest.addListener(function(request) {insertCode(request.code)});

Hace uso de una API de Google para obtener un valor del menú contextual, pero todo lo demás es normal.

Etiquetas: foco, textbox
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 16:55.