Foros del Web » Programando para Internet » Javascript »

Método y/u objeto de origen

Estas en el tema de Método y/u objeto de origen en el foro de Javascript en Foros del Web. 1. ¿Es posible saber de que método proviene una llamada a una función? 2. ¿y desde que objeto ( id ) se ha realizado dicha ...

  #1 (permalink)  
Antiguo 06/04/2009, 14:51
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Método y/u objeto de origen

1. ¿Es posible saber de que método proviene una llamada a una función?
2. ¿y desde que objeto ( id ) se ha realizado dicha llamada?
3. ¿Hay alguna forma de obtener un objeto mediante DOM por su name y no por su id? (es decir, un equivalente a "getElementById")
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #2 (permalink)  
Antiguo 06/04/2009, 14:58
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: Método y/u objeto de origen

Ninguna de tus preguntas está relacionada con AJAX, sino con javascript.
La respuesta a las 2 primeras es relativa y depende del contexto al que te refieras y a cómo estén definidos los objetos.
La última: document.getElementsByName entrega una colección de items con el mismo name.

Última edición por Panino5001; 06/04/2009 a las 15:04
  #3 (permalink)  
Antiguo 06/04/2009, 15:06
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Cita:
Iniciado por Panino5001 Ver Mensaje
Ninguna de tus preguntas está relacionada con AJAX.
La respuesta a las 2 primeras es relativa y depende del contexto al que te refieras y a cómo estén definidos los objetos.
La última: document.getElementsByName entrega una colección de items con el mismo name.
Gracias por la respuesta Panino5001, pensaba que DOM se podría englobar en esta sección o en la de javascript, ya que no vi ninguna sección del foro más apropiada ¿dónde sería correcto plantear mis dudas?

Por cierto, si utilizo document.getElementsByName("miobjeto").value = "algo"; no funciona, sin embargo con getElementByID... y definiendo "id" si va.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #4 (permalink)  
Antiguo 06/04/2009, 15:36
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: Método y/u objeto de origen

Mejor ubicarla en javascript.
getElementsByName devuelve una colección de objetos, es decir, para acceder a uno hay que conocer su ubicación y usarla como índice:
Código PHP:
document.getElementsByName('algo')[0].propiedad
ó
Código PHP:
document.getElementsByName('algo').item(0).propiedad
  #5 (permalink)  
Antiguo 06/04/2009, 15:39
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Método y/u objeto de origen

1. ¿Es posible saber de que método proviene una llamada a una función?
2. ¿y desde que objeto ( id ) se ha realizado dicha llamada?
------------------------------------------------------------------------
3. He visto que en algunas webs llaman funciones sin usar los métodos clásicos (onclick, etc...) tipo la imagen que aparece en la búsqueda de google que aparece arriba en estos foros ¿cómo lo consiguen?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #6 (permalink)  
Antiguo 06/04/2009, 15:45
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

¿Y como puedo conocer su ubicación? ¿acaso hay que recorrer el array que devuelva GetElementByName elemento a elemento hasta encontrarlo para saber su índice?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #7 (permalink)  
Antiguo 06/04/2009, 15:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Método y/u objeto de origen

Tema trasladado desde AJAX.
  #8 (permalink)  
Antiguo 06/04/2009, 15:50
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Método y/u objeto de origen

Hola:

Una función, en POO es un método... y onclick, onsubmit, etc. son manejadores de eventos (los ebentos son los que están detrás del "on" (click, submit...)

Resumiendo, todos los métodos son llamados/ejecutados por eventos, aunque esos eventos pueden asignarse inline (<body onload="cargar()" >), o pueden asignarse desde cualquier método o función... (window.onload = cargar;)

También pueden temporizarse, pero siempre existe algún evento.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 06/04/2009, 17:22
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: Método y/u objeto de origen

Quizá podríamos ayudarte mejor si colocaras el código de un ejemplo concreto y nos dijeras qué es lo que querés obtener.
  #10 (permalink)  
Antiguo 06/04/2009, 22:59
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Código:
<script type="text/javascript">
function textbox(ident,x)
{
	switch(x)
	{
		case "in": 
		{
			if ( ident == "email"){document.getElementById(ident).value = ""; break;}
			if ( ident == "pass") {document.getElementById(ident).value = ""; document.getElementById(ident).type = "password"; break;}
		}
		case "out": 
		{
			if ( ident == "email" && document.getElementById(ident).value == ""){document.getElementById(ident).value = "aqui_tu@email"; break;}
			if ( ident == "pass")
			{ 
				var y = document.getElementById(ident).value;
				if ( y == ""){document.getElementById(ident).type = "text"; document.getElementById(ident).value = "aqui tu contraseña"; break;}
			}
		}
}
</script>
<form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
	<label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="tu@email" size="20" onfocus="textbox('email','in')" onblur="textbox('email','out')"  /></label>
	<label>Contraseña:<input id="pass" type="text" name="pass"  value="aquí tu contraseña" size="10"  onfocus="textbox('pass','in')" onblur="textbox('pass',out')" /></label>
	<label><input  type="checkbox" name="autologin" />Guardar</label>
	<input type="submit" value="OK" /> 
</form>
Como se puede observar la función se llama desde el formulario mediante los eventos onfocus y onblur, si pudiera identificar desde que input se esta produciendo el evento no tendría que pasarle el parámetro "ident" a la función y si supiera que evento ha llamado a la función tampoco tendría que pasarle el parámetro "in" u "out".

Respecto a la duda de seleccionar un elemento mediante el getElementName es para prescindir del uso del atributo "id" en los "input". Pero no se como localizarlo, tal y como comentó Panino5001, para poder llamarlo por su índice.

A parte de esas dudas, encontré y modifique un poco el código de la barra de google de este foro para intentar comprenderlo:
Código:
<form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
	<label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20"  /></label>
	<label>Contraseña:<input id="pass" type="text" name="pass"  value="aquí tu contraseña" size="10"  /></label>
	<label><input  type="checkbox" name="autologin" />Guardar</label>
	<input type="submit" value="OK" /> 
</form>

<script>
(
	function()
	{
		var elemento = document.getElementById("email");
		elemento.onfocus = function(){elemento.type = "password";};
		elemento.onblur = function(){elemento.type = "text"; };
	}
)
();
</script>
Y tengo varias dudas al respecto:
1. ¿Por qué este script no lleva declarado el atributo type="text/javascript"?
2. ¿Por qué si coloco el <script> antes del <form> no funciona?
3. ¿Por qué la función esta englobada en paréntesis y después hay un "();"? ¿es acaso la forma de autollamar a la función?
4. ¿Hay alguna forma de hacer el codigo siguiente sin utilizar funtion()?
Código:
elemento.onfocus = function(){elemento.type = "password";};
Es decir, algo tipo:
elemento.onfocus = (elemento.type = "password";)
o bien:
if ( elemento.onfocus )
{elemento.type = "password";}
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 06/04/2009 a las 23:11
  #11 (permalink)  
Antiguo 06/04/2009, 23:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Método y/u objeto de origen

1) Los navegadores lo interpretan igual, pero el atributo type es obligatorio según la recomendación de la W3C.
2) Porque en ese momento los elementos a los que tratas de acceder a ún no fueron creados.
3) Sí, la función se llama a sí misma.
4) ¿Por qué necesitas hacerlo sin usar function?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #12 (permalink)  
Antiguo 06/04/2009, 23:47
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Cita:
Iniciado por David el Grande Ver Mensaje
1) Los navegadores lo interpretan igual, pero el atributo type es obligatorio según la recomendación de la W3C.
2) Porque en ese momento los elementos a los que tratas de acceder a ún no fueron creados.
3) Sí, la función se llama a sí misma.
4) ¿Por qué necesitas hacerlo sin usar function?
3) ¿Y que se llama una sola vez o repetidamente una vez tras otra? no entiendo como es capaz de capturar los eventos si solo se autollama una vez.
4) Pues porque me pareció muy extraño utilizar una función para, algo supuestamente sencillo como es declarar un valor para el atributo de un objeto, y supuse que debía haber otra forma de hacerlo más coherente, por eso lo pregunto.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #13 (permalink)  
Antiguo 06/04/2009, 23:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Método y/u objeto de origen

En realidad, de la forma como está es más coherente. Esa función se llama cada vez que se ejecuta ese evento, Si colocas:
Código javascript:
Ver original
  1. elemento.onfocus = funcion;
  2. function funcion() {
  3.     alert("onfocus event");
  4. }
Aparecerá ese mensaje "onfocus event" cada vez que el campo recibe el foco.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 07/04/2009, 00:51
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Para moderadores: dupliqué el post sin querer, edito este, borradlo si os parece bien.
Para el resto: continuar leyendo el siguiente.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #15 (permalink)  
Antiguo 07/04/2009, 00:52
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Cita:
Iniciado por David el Grande Ver Mensaje
En realidad, de la forma como está es más coherente. Esa función se llama cada vez que se ejecuta ese evento, Si colocas:
Y las formas que sugiero son posibles o existe algo equivalente? gracias.

PD: Aprovecho para recordar que me quedaron varias dudas:
Cita:
Como se puede observar la función (ver código en post anteriores) se llama desde el formulario mediante los eventos onfocus y onblur, si pudiera identificar desde que input se esta produciendo el evento no tendría que pasarle el parámetro "ident" a la función y si supiera que evento ha llamado a la función tampoco tendría que pasarle el parámetro "in" u "out".

Respecto a la duda de seleccionar un elemento mediante el getElementName es para prescindir del uso del atributo "id" en los "input". Pero no se como localizarlo, tal y como comentó Panino5001, para poder llamarlo por su índice.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #16 (permalink)  
Antiguo 07/04/2009, 04: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: Método y/u objeto de origen

Quizá te sirva tomar la información a partir del objeto event:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin t&iacute;tulo</title>
<
script>
function 
testear(e){
    var 
obj=e.srcElement || e.target;
    
alert('evento: '+e.type+'--name del objeto: '+obj.name)
}
</script>
</head>

<body>
<form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
    <label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20" onfocus="testear(event)"  /></label>
    <label>Contraseña:<input id="pass" type="text" name="pass"  value="aquí tu contraseña" size="10" onchange="testear(event)"  /></label>
    <label><input  type="checkbox" name="autologin" onclick="testear(event)" />Guardar</label>
    <input type="submit" value="OK" /> 
</form>

</body>
</html> 
  #17 (permalink)  
Antiguo 07/04/2009, 05:17
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Funciona bien el código que has proporcionado ¿podrías explicarme la siguiente línea?
Código:
var obj=e.srcElement || e.target;
Tal y como la leo parece significar que se declara una variable cuyo nombre es "obj" que adquiere el valor de event.srcElement "o" event.target, no entiendo porque no es simplemente:

var obj=e.target;

Tampoco entiendo porque si modifico el input, cambiando onfocus por onclick y añadiendo a su vez onblur tal que así:
Código:
<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20" onclick="testear(event)"  onblur="testear(event)"  />
Me saltan dos alerts al hacer click en el campo de texto, primero el de onblur y luego el de onclick, cuando no se ha producido el primero, por lo que solo debería aparecer el segundo.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 07/04/2009 a las 05:22
  #18 (permalink)  
Antiguo 07/04/2009, 06:04
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: Método y/u objeto de origen

e. target || e.srcElement se debe a que Explorer posee su propio estandar, que es diferente del resto de los navegadores (el estandar es la propiedad target, que no es reconocida por Explorer).
Te recomiendo que leas http://kusor.net/traducciones/brainj...vents1.es.html
Y cuando ponés el foco sobre un objeto se produce más de un evento (quizá esto también te quede más claro luego de leer el enlace anterior)
  #19 (permalink)  
Antiguo 07/04/2009, 10:33
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Cita:
Iniciado por Panino5001 Ver Mensaje
e. target || e.srcElement se debe a que Explorer posee su propio estandar, que es diferente del resto de los navegadores (el estandar es la propiedad target, que no es reconocida por Explorer).
Te recomiendo que leas http://kusor.net/traducciones/brainj...vents1.es.html
Y cuando ponés el foco sobre un objeto se produce más de un evento (quizá esto también te quede más claro luego de leer el enlace anterior)
Es muy interesante ese documento, gracias. Pero sigo sin entender porque al tener en un input onfocus y onblur me dispara los dos al hacer click en el elemento, en teoría no hay burbujeo posible que disparase el onblur ¿o si?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #20 (permalink)  
Antiguo 07/04/2009, 10:48
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Método y/u objeto de origen

No entendí tu última pregunta Dude--.

Lo que sucede es que al pasar el foco a otro elemento, se dispara el evento onblur del ememento que perdió el foco, luego, el evento onfocus del que lo recibe.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #21 (permalink)  
Antiguo 07/04/2009, 10:52
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: Método y/u objeto de origen

Pasa que en el momento en que se dispara el primer alert se pierde el foco (es el propio alert lo que hace que se pierda el foco). Podés comprobar que sucede algo semejante, pero quizá más notorio, si en lugar de onclick usás onkeypress, por ejemplo.
  #22 (permalink)  
Antiguo 07/04/2009, 11:02
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

David el Grande: Es que yo pensaba que se disparaba el onblur como consecuencia del onfocus, sin tener en cuenta el alert.

No había reparado en los alerts. Debe ser que estaba demasiado concentrado en los input y no fui capaz de abstraerme un poco del problema. Gracias una vez más Panino.

Lo que es gracioso que el primer alert marque en su mensaje el onblur, cuando en teoría el primer evento registrado debería ser, siguiendo este diagrama:
click en el textbox -> onfocus del textbox
esto provoca el alert -> onblur del textbox

onfocus y no onblur :/
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #23 (permalink)  
Antiguo 07/04/2009, 11:08
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: Método y/u objeto de origen

El orden es todo un tema. Durante un onclick se producen varios eventos: mousedown, mouseover, mouseup, click, por ejemplo, y diferentes navegadores registran de manera diferente el orden en que se producen esos eventos.
  #24 (permalink)  
Antiguo 07/04/2009, 11:37
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Cita:
Iniciado por Panino5001 Ver Mensaje
El orden es todo un tema. Durante un onclick se producen varios eventos: mousedown, mouseover, mouseup, click, por ejemplo, y diferentes navegadores registran de manera diferente el orden en que se producen esos eventos.
Ya podían aplicarse un poquito en los standares... tendremos que castigar a los cutrebrowsers para que vayan tomando nota.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #25 (permalink)  
Antiguo 08/04/2009, 02:40
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

¿Por qué esto no funciona?

Código javascript:
Ver original
  1. <script>
  2. function testear(e){
  3.     var obj=e.srcElement || e.target;
  4.     var objeto = obj.name;
  5.     var evento = e.type;
  6.     objeto.evento = function(){document.write("hola");};   
  7. }
  8. </script>
  9.  
  10. <body>
  11. <form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
  12.     <label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20" onfocus="testear(event)" onblur="testear(event)"  /></label>
  13.     <label>Contraseña:<input id="pass" type="text" name="pass"  value="aquí tu contraseña" size="10" onchange="testear(event)"  /></label>
  14.     <label><input  type="checkbox" name="autologin" onclick="testear(event)" />Guardar</label>
  15.     <input type="submit" value="OK" />
  16. </form>
  17. </body>

Y sin embargo si no llamo a ninguna función si va:
Código javascript:
Ver original
  1. objeto.evento = document.write("hola");
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #26 (permalink)  
Antiguo 08/04/2009, 02:57
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Método y/u objeto de origen

No sé qué es lo que intentas hacer con ese código, pero lo que realmente haces, no tiene sentido. En ninguno de los dos casos, ni con función ni sin ella.

Código javascript:
Ver original
  1. function testear(e){
  2.     // Guardamos en obj el elemento sobre el que se produjo el evento:
  3.     var obj=e.srcElement || e.target;
  4.     // Guardamos el nombre de ese elemento en una variable llamada objeto.
  5.     // Objeto es algo como "email".
  6.     var objeto = obj.name;
  7.     // Guardamos en una variable llamada evento el tipo de evento ocurrido
  8.     var evento = e.type;
  9.     // Ahora, a la variable objeto (que tenía de valor la cadena "email")
  10.     // le añadimos una propiedad llamada "evento" y le asignamos una
  11.     // función que escribe "hola" en el document.
  12.     // Es interesante notar que sólo asignamos esa función, no la llamamos
  13.     // ni nada. Y que se la asignamos a una variable llamada objeto,
  14.     // no a ningún elemento real del DOM ni nada similar.
  15.     // También es interesante notar que le añadimos una propiedad
  16.     // llamada "evento" así tal cual; no tiene ninguna relación
  17.     // con la variable evento anterior.
  18.     objeto.evento = function(){document.write("hola");};
  19.     // Salimos de la función, y las variables obj, objeto, evento se destruyen.
  20.     // Como no hemos hecho nada con ellas,
  21.     // la función no tiene ningún efecto, no hace nada.
  22. }

En el caso de poner objeto.evento = document.write("hola") lo único que cambia es que estamos llamando directamente a que escriba "hola" en el documento. Esto es casi peor que lo anterior, porque, por un lado seguimos sin asignar nada a objeto.evento (si es que realmente queremos asignarle algo) y por otra parte nos estamos cargando el document, sobreescribiéndolo con "hola".


Así que me pregunto, Dude--, ¿qué es lo que estás intentando hacer?
  #27 (permalink)  
Antiguo 08/04/2009, 03:36
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

mmm lo que intento hacer es una función que reconozca que evento se ha producido y que objeto lo ha lanzado y desde ahí hacer cambios en la estructura mediante dom.

En mi código inicial, ya que ese era para ver porque no funciona, en vez de:
Código javascript:
Ver original
  1. document.write("hola")
tenía puesto:
Código javascript:
Ver original
  1. document.getElementById(objeto).value = "focus";
para comprobar que funcionaba se supone que esto debería cambiar el value del textbox e indicar el evento. Claro que como no puedo poner directamente:
Código javascript:
Ver original
  1. objeto.evento = document.getElementById(objeto).value = "focus";
pues utilizaba la funcion:
Código javascript:
Ver original
  1. objeto.evento = function() {document.getElementById(objeto).value = "focus";}

El motivo por el que declaro las variables objeto y evento es porque no me funcionaba si ponía algo como esto en mis pruebas:
Código javascript:
Ver original
  1. obj.name.e.type = document.write("loquesea");

Y respecto a lo que comentas de que solo asigno la función que no la llamo ni nada, te dejo el código original que sigo de ejemplo:
Código javascript:
Ver original
  1. <form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
  2.     <label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20"  /></label>
  3.     <label>Contrase&#241;a:<input id="pass" type="text" name="pass"  value="aquí tu contraseña" size="10"  /></label>
  4.     <label><input  type="checkbox" name="autologin" />Guardar</label>
  5.     <input type="submit" value="OK" />
  6. </form>
  7.  
  8. <script>
  9. (
  10.     function()
  11.     {
  12.         var elemento = document.getElementById("email");
  13.         elemento.onfocus = function(){elemento.type = "password";};
  14.         elemento.onblur = function(){elemento.type = "text"; };
  15.     }
  16. )
  17. ();
  18. </script>

Cita:
venkman
Es interesante notar que sólo asignamos esa función, no la llamamos ni nada. Y que se la asignamos a una variable llamada objeto, no a ningún elemento real del DOM ni nada similar.
Supongo que con esto te refieres a que la declaración de "objeto" debería ser esta:
Código javascript:
Ver original
  1. var objeto = document.getElementById(obj.name);

Y que debería utilizar algo así para usar el evento:
Código javascript:
Ver original
  1. if ( evento != "" )
  2.     {objeto.value = evento;}
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 08/04/2009 a las 03:54
  #28 (permalink)  
Antiguo 08/04/2009, 04:24
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Bueno hice algunas modificaciones y ahora el código funciona CASI (leer después del código) correctamente:
Código javascript:
Ver original
  1. <script type="text/javascript">
  2.         function checkevent(e)
  3.         {
  4.             var obj=e.srcElement || e.target;
  5.             var objeto = document.getElementById(obj.name);
  6.             var evento = e.type;
  7.            
  8.             if ( obj.name == "email" )
  9.             {
  10.                 if(evento == "focus" && objeto.value == "[email protected]")
  11.                 { objeto.value = ""; }
  12.                 if(evento == "blur" && objeto.value == "" )
  13.                 { objeto.value = "[email protected]"; }
  14.             }
  15.            
  16.             if ( obj.name == "pass" )
  17.             {
  18.                 if(evento == "focus" && objeto.value == "su contraseña")
  19.                 { objeto.value = ""; objeto.type = "password"; }
  20.                 if(evento == "blur" && objeto.value == "")
  21.                 { objeto.value = "su contraseña"; objeto.type = "text"; }
  22.             }
  23.    
  24.         }
  25.     </script>

Pero hay dos problemas:
1. En IE no cambia el tipo en objeto.type = "password" dice que no reconoce "type"...
2. En Opera y Chrome al hacer click o llegar mediante tabulador al textbox "pass" cambia el tipo pero hay que pinchar otra vez para que salga el cursor parpadeando y poder escribir.

¿alguna idea para solucionarlos?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #29 (permalink)  
Antiguo 14/04/2009, 08:00
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

He estado investigando varios días y no consigo solucionar los problemas de mi último post.

Lo único que he podido descubrir es que en relación con el problema número 1, IE parece tener algún problema con la asignación mediante DOM del atributo type.
Código:
objeto.type = "password";
Pero no veo la forma de solucionarlo.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 14/04/2009 a las 08:28
  #30 (permalink)  
Antiguo 14/04/2009, 11:04
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Método y/u objeto de origen

Si haces click en el textbox "pass" debe cambiar el type a password y mantener el foco. El problema surge en esta última parte, pero tras el código también pongo otras dudas que necesito resolver.

Código javascript:
Ver original
  1. <script type="text/javascript">
  2.         function checkevent(e)
  3.         {
  4.             var obj=e.srcElement || e.target;
  5.             var objeto = document.getElementById(obj.name);
  6.             var evento = e.type;
  7.            
  8.             if ( obj.name == "email" )
  9.             {
  10.                 if(evento == "focus" && objeto.value == "[email protected]")
  11.                 { objeto.value = ""; }
  12.                 if(evento == "blur" && objeto.value == "" )
  13.                 { objeto.value = "[email protected]"; }
  14.             }
  15.            
  16.             if ( obj.name == "pass" )
  17.             {
  18.                 if(evento == "focus" && objeto.value == "su contraseña")
  19.                 {
  20.                     var formulario = document.getElementById("identificacion");
  21.                     var nuevotextbox = document.createElement("input");
  22.                     /*nuevotextbox.setAttribute("value", "");
  23.                     nuevotextbox.setAttribute("type", "password");*/
  24.                     nuevotextbox.value = "";
  25.                     nuevotextbox.type = "password";
  26.                     nuevotextbox.name = "pass";
  27.                     formulario.replaceChild(nuevotextbox, objeto);
  28.                     nuevotextbox.id = "pass"
  29. nuevotextbox.focus();
  30.                 }
  31.                 if(evento == "blur" && objeto.value == "")
  32.                 { objeto.value = "su contraseña"; objeto.type = "text"; }
  33.             }
  34.    
  35.         }
  36. </script>
Código html:
Ver original
  1. <form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
  2.     <label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20"  /></label>
  3.     <label>Contraseña:<input id="pass" type="text" name="pass"  value="aquí tu contraseña" size="10"  /></label>
  4.     <label><input  type="checkbox" name="autologin" />Guardar</label>
  5.     <input type="submit" value="OK" />
  6. </form>

Primer problema:
Mirando el post en el que me basé para establecer donde debía situar la asignación del id al nuevo objeto (nuevotextbox.id = "pass"), deduzco que aparece detrás de "replaceChild" porque no puede haber dos objetos con el mismo ID a la vez, sin embargo si lo colocas antes funciona igualmente. ¿Es quizás porque el objeto no "existe" hasta que se reemplaza en el cuerpo de la página web, es decir, cuando se utiliza "replaceChild" y por tanto no hay "colision" dando igual donde coloques la asignación de id al nuevo objeto? no lo tengo nada claro.

Segundo problema:
¿Qué diferencia hay entre: nuevotextbox.setAttribute("type", "password") y nuevotextbox.type = "password"? ¿cual es correcto usar y por qué?

Tercer problema
nuevotextbox.focus(); en este caso no funciona en IE, sin embargo tal y como se puede ver aquí, focus() si funciona en IE, por lo que me pregunto ¿por qué no funciona en mi caso?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 14/04/2009 a las 15:39
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 04:32.