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 listbox
basado en la selección de otro listbox
. Cuando listbox
se cambia la selección de uno , llamará a un nombre de método basado en el valor seleccionado de listbox
.
Por ejemplo:
Listbox1
contiene:
Colours
Shapes
Si Colours
está seleccionado, llamará a un populate_Colours
método que rellene otro listbox
.
Para aclarar mi pregunta: ¿Cómo hago esa populate_Colours
llamada en JavaScript?
javascript
dynamic
methods
Chris B
fuente
fuente
Respuestas:
Suponiendo que el
populate_Colours
mé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 delwindow
objeto 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
/eval
para 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
ServiceWorker
oWorker
, reemplacewindow
conself
:Los trabajadores no tienen acceso al DOM, por
window
lo 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
this
y 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
eval
funció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.