Estou trabalhando na criação dinâmica de algum JavaScript que será inserido em uma página da web enquanto está sendo construída.
O JavaScript será usado para preencher um com listbox
base na seleção de outro listbox
. Quando a seleção de um listbox
for alterada, ele chamará um nome de método com base no valor selecionado de listbox
.
Por exemplo:
Listbox1
contém:
Colours
Shapes
Se Colours
for selecionado, ele chamará um populate_Colours
método que preenche outro listbox
.
Para esclarecer minha pergunta: Como faço essa populate_Colours
chamada em JavaScript?
javascript
dynamic
methods
Chris B
fonte
fonte
Respostas:
Assumindo que o
populate_Colours
método está no namespace global, você pode usar o código a seguir, que explora que todas as propriedades do objeto podem ser acessadas como se o objeto fosse um array associativo e que todos os objetos globais são realmente propriedades dowindow
objeto host.fonte
$.fn[method_prefix + method_name](arg1, arg2);
try
/catch
, talvez.$(function () {
ewindow.load
:)Como Triptych aponta, você pode chamar qualquer função de escopo global localizando-a no conteúdo do objeto host.
Um método mais limpo, que polui o namespace global muito menos, é colocar explicitamente as funções em uma matriz diretamente, assim:
Essa matriz também pode ser uma propriedade de algum objeto diferente do objeto host global, o que significa que você pode criar seu próprio namespace com eficácia, como fazem muitas bibliotecas JS, como jQuery. Isso é útil para reduzir conflitos se / quando você incluir várias bibliotecas de utilitários separadas na mesma página e (se outras partes do seu design permitirem) pode tornar mais fácil reutilizar o código em outras páginas.
Você também pode usar um objeto como este, que pode ser mais limpo:
Observe que, com um array ou um objeto, você pode usar qualquer um dos métodos de configuração ou acesso às funções e, é claro, também pode armazenar outros objetos. Você pode reduzir ainda mais a sintaxe de qualquer um dos métodos para conteúdo que não seja tão dinâmico usando a notação literal JS como:
Editar: é claro que para blocos maiores de funcionalidade, você pode expandir o acima para o "padrão de módulo" muito comum, que é uma maneira popular de encapsular recursos de código de maneira organizada.
fonte
var dyn_functions = {};
isso para não criar um array desnecessariamente ... isso não é um grande problema.Eu recomendaria NÃO usar
global
/window
/eval
para essa finalidade.Em vez disso, faça desta forma:
define todos os métodos como propriedades de Handler:
Agora chame assim
Produto: Jerry
fonte
você pode fazer assim:
fonte
Dentro de
ServiceWorker
ouWorker
, substituawindow
porself
:Os trabalhadores não têm acesso ao DOM, portanto,
window
é uma referência inválida. O identificador de escopo global equivalente para esse propósito éself
.fonte
Eu não recomendaria usar a janela como algumas das outras respostas sugerem. Use
this
e escopo de acordo.Outro truque interessante é chamar em escopos diferentes e usá-lo para herança. Digamos que você tenha aninhado a função e queira acessar o objeto janela global. Você poderia fazer isso:
fonte
Oi tente isso,
ele tratará dos próprios parâmetros.
fonte
functionName
... o respondente presumiu que você já tinha definido isso.Aqui está uma solução simples e funcional para verificar a existência de uma função e fazer a triagem dessa função dinamicamente por outra função;
Função de gatilho
e agora você pode gerar a função dinamicamente, talvez usando php como este
agora você pode chamar a função usando um evento gerado dinamicamente
o código HTML exato que você precisa é
fonte
Experimente com isto:
fonte
eval
função tem alguns efeitos colaterais estranhos relacionados ao seu uso. Eu geralmente tento ficar longe dela, a menos que seja um último recurso.