Foros del Web » Programando para Internet » Javascript »

Llamar a una función creada dinamicamente

Estas en el tema de Llamar a una función creada dinamicamente en el foro de Javascript en Foros del Web. Hola a todos. Si asigno una función dinamicamente a, por ejemplo, un botón con este código: Código PHP: elem = document . getElementById ( 'boton' ...
  #1 (permalink)  
Antiguo 24/05/2004, 12:00
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
Llamar a una función creada dinamicamente

Hola a todos.

Si asigno una función dinamicamente a, por ejemplo, un botón con este código:
Código PHP:
elem=document.getElementById('boton');
elem.onclick = function () {alert(this.value)} 
Como se podría, si es que se puede, llamar a esa función desde otro botón.

Gracias por vuestra ayuda. Saludos,
  #2 (permalink)  
Antiguo 24/05/2004, 12:34
Avatar de Carlitos
Usuario no validado
 
Fecha de Ingreso: mayo-2001
Ubicación: Zaragoza
Mensajes: 1.304
Antigüedad: 23 años, 8 meses
Puntos: 25
probando, probando... 1,2,3...

Código:
<input type="button" id="boton">
<input type="button" onclick="elem.click()">
<script>
elem=document.getElementById('boton');
elem.onclick = function () {alert(this.value)}
</script>
  #3 (permalink)  
Antiguo 24/05/2004, 12:41
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
"No me lo puedo de creer"

Había probado poniendo click de varias formas, pero me faltaba poner los paréntesis al final.

Gracias por tu ayuda Carlitos. Prueba superada

Saludos,
  #4 (permalink)  
Antiguo 24/05/2004, 12:45
Avatar de Carlitos
Usuario no validado
 
Fecha de Ingreso: mayo-2001
Ubicación: Zaragoza
Mensajes: 1.304
Antigüedad: 23 años, 8 meses
Puntos: 25


Hoy por ti, mañana por mi.
  #5 (permalink)  
Antiguo 24/05/2004, 13:00
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 4 meses
Puntos: 381
Uf, yo jugando a hacer pruebas de este tipo me he llegado a encontrar con resultados totalmente inesperados y muy interesantes

Eso sí... aún no les he encontrado aplicación, pero yá se la encontraré yá

saludillos
  #6 (permalink)  
Antiguo 13/10/2004, 09:22
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
Hola de nuevo.

Rescato este mensaje, proque no me funciona del todo el código que propuso Carlitos (¡Hola! ) Me explico, funciona bien en IE, pero no en Nescafé ni Nocilla. Voy a dejar el código que he usado para hacer pruebas:
Código HTML:
<html>
<head>
<title>Untitled</title>
<style type="text/css">
div{width:50px;height:50px;border:1px solid blue;background-color:yellow}
</style>
<script type="text/javascript">
function ini() {
  elem=document.createElement('div');
  elem.id='div1';
  elem.onclick=function() {alert(this.id)};
  document.body.appendChild(elem);
}
</script>
</head>
<body onload="ini()">
<input type="button" onclick="document.getElementById('div1').click()">
</body>
</html> 
Como siempre, gracias por vuestra ayuda. Saludos,
  #7 (permalink)  
Antiguo 13/10/2004, 16:54
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 23 años
Puntos: 1
Esto no funciona en Mozilla porque un HTMLElement no tiene el metodo click().

El único elemento que tiene el metodo click(), segun el API de Javascript, es el HTMLInputElement, que hereda de HTMLElement.

Aqui tienes un enlace a la documentación, por si te sirve de algo.

Documentación

Última edición por xavivars; 13/10/2004 a las 17:21
  #8 (permalink)  
Antiguo 13/10/2004, 17:59
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 23 años
Puntos: 1
He encontrado la manera de funcionar

Código HTML:
<html>
<head>
<title>Untitled</title>
<style type="text/css">
div{width:50px;height:50px;border:1px solid blue;background-color:yellow}
</style>
<script type="text/javascript">
function ini() {
  elem=document.createElement('div');
  elem.id='div1';
  elem.onclick=function() {alert(this.id)};
  document.body.appendChild(elem);
}
</script>
</head>
<body onload="ini()">
<input type="button" onclick="document.getElementById('div1').onclick()">
</body>
</html> 
Esto, aunque funciona, no es porque el HTMLDivElement tenga un metodo onclick(), sino porque tu antes lo has definido.

Así, si haces

Código HTML:
<html>
<head>
<title>Untitled</title>
<style type="text/css">
div{width:50px;height:50px;border:1px solid blue;background-color:yellow}
</style>
<script type="text/javascript">
function ini() {
  elem=document.createElement('div');
  elem.id='div1';
  elem.nombrequetuquieras=function() {alert(this.id)};
  document.body.appendChild(elem);
}
</script>
</head>
<body onload="ini()">
<input type="button" onclick="document.getElementById('div1').nombrequetuquieras()">
</body>
</html> 
funcionará lo de que cuando aprietes el boton se ejecute la funcion nombrequetuquieras() del div.

Jugando con esto, si le pones a nombrequetuquieras() el nombre de onclick() estas matando dos pajaros de un tiro: si pulsas directamente sobre el div, estas llamando al evento "onclick" que tiene la etiqueta DIV de html, en cambio si pulsas sobre el boton, se esta ejecutando el metodo onclick() QUE TU ACABAS DE CREAR en el objeto "elem" (del tipo HTMLDivElement).

Espero que me entiendas (no se ni siquiera si me entiendo yo...)
  #9 (permalink)  
Antiguo 14/10/2004, 03:20
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
Hola xavivars.

No he mirado el enlace que has dejado por falta de tiempo, pero tu explicación se ha entendido bien y el código funciona de maravilla.

Muchas gracias por tu ayuda. Saludos,
  #10 (permalink)  
Antiguo 14/10/2004, 05:05
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 23 años
Puntos: 1
De nada, a mandar!
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 01:34.