Pergunta

Eu criei um controle da Web no ASP para uso na integração com o Telligent CommunityServer. O controle é escrito no ASP com cerca de 10 linhas de back-end de C# para controlar a visibilidade dos elementos da interface do usuário com base em permissões, mas eu diria que 90% da funcionalidade é JavaScript direto.

O controle funciona lindamente, até que você solte duas instâncias do controle na mesma página-pois eles fazem referência exatamente as mesmas funções JavaScript, apenas um controle funciona.

Como posso pegar essa funcionalidade que tenho, essas 1200 linhas de JavaScript e fazê -lo para que cada instância do controle possa referenciar sua instância única de JavaScript?

Foi útil?

Solução

Se o problema é simplesmente descobrir qual elemento HTML desencadeou um evento, isso é fácil - ele é passado para você nos argumentos do evento. (Você pode obter seu elemento pai, é claro.) Portanto, se eu entender o problema corretamente, você tem funções JavaScript que referenciam alguns controles, que são duplicados?

Eu não acho que exista nenhuma solução mágica aqui: você só precisa tornar o IDS único. Se você não estiver usando controles do lado do servidor (que lidam com isso automaticamente), poderá usar algum prefixo ou sufixo gerado por servidor, por exemplo.

<input id="<%= ParentControlId %>_mytextbox" type="text" />

Onde ParentControlId é um ID exclusivo do controle dos pais (você pode usar o controle.ID se não se importar com IDs longos).

Obviamente, você deve tentar reutilizar suas funções JavaScript, em vez de duplicar-as para cada instância de controle. Se você estiver usando a abordagem de ID gerada pelo servidor, terá que passar os IDs inteiros. Se você estiver usando a abordagem do prefixo, poderá simplesmente passar o prefixo.

Outras dicas

Como seu controle está colocando o JavaScript na página, então? Injetando -o diretamente? Você está usando uma scriptreference? O navegador carregaria apenas o JS uma vez se ambos os controles referenciaram o mesmo JS (o mesmo URL).

Além disso, seu JS está escrito em termos de qualquer instância antiga? Por exemplo, você tem função como carga (OControlName) ou a função Load () tem um nome de instância codificado dentro dela?

IMO, tentar obter vários 'JavaScripts' não é o caminho a seguir - refatorar seu código pode obter sua resposta mais rapidamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top