Estoy trabajando en la creación dinámica de JavaScript que se insertará en una página web a medida que se construye.
El JavaScript se utilizará para rellenar un listboxbasado en la selección de otro listbox. Cuando listboxse cambia la selección de uno , llamará a un nombre de método basado en el valor seleccionado de listbox.
Por ejemplo:
Listbox1 contiene:
ColoursShapes
Si Coloursestá seleccionado, llamará a un populate_Coloursmétodo que rellene otro listbox.
Para aclarar mi pregunta: ¿Cómo hago esa populate_Coloursllamada en JavaScript?
javascript
dynamic
methods
Chris B
fuente
fuente

Respuestas:
Suponiendo que el
populate_Coloursmétodo está en el espacio de nombres global, puede usar el siguiente código, que explota tanto que se puede acceder a todas las propiedades del objeto como si el objeto fuera una matriz asociativa, y que todos los objetos globales son en realidad propiedades delwindowobjeto anfitrión.fuente
$.fn[method_prefix + method_name](arg1, arg2);try/catch.$(function () {ywindow.load:)Como señala Triptych, puede llamar a cualquier función de alcance global encontrándola en el contenido del objeto host.
Un método más limpio, que contamina mucho menos el espacio de nombres global, es poner explícitamente las funciones en una matriz directamente así:
Esta matriz también podría ser una propiedad de algún objeto que no sea el objeto de host global, lo que significa que puede crear efectivamente su propio espacio de nombres como lo hacen muchas bibliotecas JS como jQuery. Esto es útil para reducir conflictos si / cuando incluye varias bibliotecas de utilidades separadas en la misma página, y (si otras partes de su diseño lo permiten) puede facilitar la reutilización del código en otras páginas.
También puede usar un objeto como este, que puede encontrar más limpio:
Tenga en cuenta que con una matriz o un objeto, puede utilizar cualquier método de configuración o acceso a las funciones y, por supuesto, también puede almacenar otros objetos allí. Puede reducir aún más la sintaxis de cualquiera de los métodos para el contenido que no es tan dinámico mediante el uso de la notación literal JS así:
Editar: por supuesto, para bloques de funcionalidad más grandes, puede expandir lo anterior al "patrón de módulo" muy común, que es una forma popular de encapsular características de código de manera organizada.
fuente
var dyn_functions = {};para no crear una matriz innecesariamente ... aunque esto no es un gran problema.Recomendaría NO usar
global/window/evalpara este propósito.En su lugar, hazlo de esta manera:
define todos los métodos como propiedades de Handler:
Ahora llámalo así
Salida: jerry
fuente
puedes hacerlo así:
fuente
Dentro de
ServiceWorkeroWorker, reemplacewindowconself:Los trabajadores no tienen acceso al DOM, por
windowlo tanto, es una referencia inválida. El identificador de alcance global equivalente para este propósito esself.fuente
No recomendaría usar la ventana como sugieren algunas de las otras respuestas. Utilice
thisy alcance en consecuencia.Otro buen truco es llamar dentro de diferentes ámbitos y usarlo como herencia. Digamos que ha anidado la función y desea acceder al objeto de ventana global. Podrías hacer esto:
fuente
Hola prueba esto
manejará los parámetros por sí mismo.
fuente
functionName... el respondedor asumió que ya lo tenías definido.Aquí hay una solución funcional y simple para verificar la existencia de una función y clasificar esa función dinámicamente por otra función;
Función de disparo
y ahora puede generar la función dinámicamente, tal vez usando php como este
ahora puede llamar a la función usando un evento generado dinámicamente
el código HTML exacto que necesita es
fuente
Prueba con esto:
fuente
evalfunción tiene algunos efectos secundarios extraños relacionados con su uso. Por lo general, trato de mantenerme alejado, a menos que sea un último recurso.