Foros del Web » Programando para Internet » Javascript » Frameworks JS »

[SOLUCIONADO] Llamar funciones con nombre dinamico

Estas en el tema de Llamar funciones con nombre dinamico en el foro de Frameworks JS en Foros del Web. Hola, Hoy vengo a preguntar algo un poco complicado, al menos no he encontrado nada que me de una idea. Por ahi no se puede ...
  #1 (permalink)  
Antiguo 16/04/2014, 07:17
Avatar de carscx  
Fecha de Ingreso: noviembre-2008
Mensajes: 227
Antigüedad: 16 años
Puntos: 10
Llamar funciones con nombre dinamico

Hola,

Hoy vengo a preguntar algo un poco complicado, al menos no he encontrado nada que me de una idea. Por ahi no se puede hacer.

La cuestion es la siguiente, en una aplicacion con varios botones, para poder gestionar bien de manera dinamica las acciones de estos botones. Les he asignado un atributo llamado "data-funcion='nombreDeFuncion'"

Mi idea es crear una funcion que traiga el nombre de la funcion como esta:

Código Javascript:
Ver original
  1. var clickDelBoton = function(boton){
  2.     $("button").on("click", function(){
  3.         var funcionBtn = $(this).attr("data-funcion");
  4.     })
  5. }

Y que despues, ejecute la funcion con el nombre del atributo.

Hay alguna forma de hacerlo?

Gracias!
__________________
Frontend Developer
JS+HTML5+CSS3
Backend Developer
PHP+MySQL
  #2 (permalink)  
Antiguo 16/04/2014, 07:36
Avatar de carscx  
Fecha de Ingreso: noviembre-2008
Mensajes: 227
Antigüedad: 16 años
Puntos: 10
Respuesta: Llamar funciones con nombre dinamico

Solucionado a medias....

Añadiendo la funcion eval(). Se consigue lo que quiero hacer.

PERO.......

Según he leido no es una buena practica JavaScript y puede comprometer la seguridad de la aplicacion. Pero no se hasta que punto se podra comprometer la seguridad.

Hay alguna alternativa segura para el uso de eval()??

Gracias!
__________________
Frontend Developer
JS+HTML5+CSS3
Backend Developer
PHP+MySQL
  #3 (permalink)  
Antiguo 16/04/2014, 08:36
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Llamar funciones con nombre dinamico

Veo que estás usando jQuery...

Existe un método para manipular información en los elementos con atributos data-: jQuery.data().

Lo de guardar el normbre de cada función y luego ejecutarla no es buena técnica, sería mejor asociar un evento a cada elemento que invoquen diferentes funciones.

Aun así se puede hacer sin necesidad de recurrir a eval().
  #4 (permalink)  
Antiguo 16/04/2014, 08:43
Avatar de carscx  
Fecha de Ingreso: noviembre-2008
Mensajes: 227
Antigüedad: 16 años
Puntos: 10
Respuesta: Llamar funciones con nombre dinamico

gracias PHPEros por la respuesta,

Si, uso jQuery,

Ya he cambiado la recepcion con .attr del atributo data por .data().

A que te refieres con asociar un evento a cada elemento?

Gracias por la respuesta,

Actualmente he cambiado de esto:

Código Javascript:
Ver original
  1. var clickBtn = function(boton){
  2.     $("button").on("click", function(){
  3.         var funcionBtn = $(this).attr("data-funcion");
  4.                 eval( funcionBtn + "()" );
  5.     });
  6. };

A esto:

Código Javascript:
Ver original
  1. var clickBtn = function(boton){
  2.     $("button").on("click", function(){
  3.         var funcionBtn = $(this).data("funcion");
  4.         $.globalEval(funcionBtn + "()");
  5.     });
  6. };

Y por lo menos el jSHint no da error y funciona.
__________________
Frontend Developer
JS+HTML5+CSS3
Backend Developer
PHP+MySQL
  #5 (permalink)  
Antiguo 16/04/2014, 08:54
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Llamar funciones con nombre dinamico

Cita:
Iniciado por carscx
en una aplicacion con varios botones, para poder gestionar bien de manera dinamica las acciones de estos botones. Les he asignado un atributo llamado "data-funcion='nombreDeFuncion'"
A donde quiero llegar, es que no tiene sentido lo que tratas de hacer... Si quieres controlar la acción de un elemento concreto, lo obtienes por su ID -por poner un ejemplo- y le asocias una función propia:

Código Javascript:
Ver original
  1. $("#boton1").on("click", function(){
  2.      // Acción para este elemento
  3. });
  4.  
  5. $("#boton2").on("click", function(){
  6.      // Acción para este otro elemento
  7. });

Y así con todos.
  #6 (permalink)  
Antiguo 16/04/2014, 08:58
Avatar de carscx  
Fecha de Ingreso: noviembre-2008
Mensajes: 227
Antigüedad: 16 años
Puntos: 10
Respuesta: Llamar funciones con nombre dinamico

Tienes toda la razon, es una complicacion, lo voy a hacer como me indicas ahi.

Gracias!
__________________
Frontend Developer
JS+HTML5+CSS3
Backend Developer
PHP+MySQL

Etiquetas: dinamico, funcion, funciones, javascript, nombre
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 08:55.