Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal... Bom eu vi alguns posts relacionados a isso e então resolvi fazer uns testes.Bem, mais abaixo tem um codigo fonte do meu experimento.Observemos algumas coisa:- Funcionou, mas há um porém. Não dá para inserir o evento no botão da forma manual. Então, a criação da chamada das funções devem ser feitas também pelo javascript ou então ele não reconhece que a função existe.Creio eu que tem de ser feito dessa forma pelo motivo de que quando se define uma chamada de função manualmente, a chamada da função referencia a uma função que ainda não foi criada. Fazendo o próprio script definir as chamadas das funções, a chama é feita a uma função que acabou de ser criada.Sejamos mais claros:
> Vamos supor que a funcao1() é criada pelo seu script. Se você chamar essa função no evento onKeyPress do botão ele não funcionará pois a função ainda não foi criada no momento em que a chamada foi criada. Então, essa chamada está chamando a funcao1() no endereço X. Acontece que a função foi criada depois e foi alocada na memória no endereço Y. Como a chama está chamando algo que não existe em X, nada acontece como se a função não existisse.<input type="button" value="função" onClick="funcao1()">
A solução então foi fazer com que após criar as funções pelo script, esse mesmo script insere as chamadas nos eventos.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""[http://www.w3.org/TR/html4/loose.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>teste check</title><script>function criaFuncoes() { for (i = 1; i<=4; i++) { strFunction = "function funcao"+ i +"() {"; strFunction = strFunction + "alert('Função "+ i +"')"; strFunction = strFunction + "}"; eval(strFunction); alert('Função criada: \n'+ strFunction); } var cont = 1; for (j = 0; j<document.formFuncoes.elements.length; j++) { if (document.formFuncoes.elements[j].type == "button") { eval('document.formFuncoes.elements['+ j +'].onclick = function(){funcao'+ cont +'()}'); alert('Chamada criada: \ndocument.formFuncoes.elements['+ j +'].onClick = function(){funcao'+ cont +'()}'); cont++; } }}</script></head><body onLoad="criaFuncoes();"><form name="formFuncoes" method="post" action=""> <input type="button" name="Submit" value="Função 1"> <input type="button" name="Submit" value="Função 2"> <input type="button" name="Submit" value="Função 3"> <input type="button" name="Submit" value="Função 4"></form></body></html>MAS ESPERA AÍ! E SE EU MANDAR EXECUTAR A CRIAÇÃO ANTES DO FORM?Aí funciona!!!Foi o que fiz. Acontece que no exemplo anterior, eu estava chamando a função de criação no evento onLoad da tag body. Portanto, a criação das funções só estava sendo feita depois da página ser carregada.O que eu fiz foi por para o codigo de criação das funções ser feita antes das chamadas.Com isso, a velocidade do script melhorou teoricamente e também o tamanho do código foi reduzido. Segue ele abaixo:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""[http://www.w3.org/TR/html4/loose.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>teste check</title></head><body><script> for (i = 1; i<=4; i++) { strFunction = "function funcao"+ i +"() {"; strFunction = strFunction + "alert('Função "+ i +"')"; strFunction = strFunction + "}"; eval(strFunction); }</script><form name="formFuncoes" method="post" action=""> <input type="button" name="Submit" value="Função 1" onClick="funcao1();"> <input type="button" name="Submit" value="Função 2" onClick="funcao2();"> <input type="button" name="Submit" value="Função 3" onClick="funcao3();"> <input type="button" name="Submit" value="Função 4" onClick="funcao4();"></form></body></html>Bom, isso resolve os problemas de criação de funções semi-identicas =)Abraço pra vcs!t+ [http://forum.imasters.com.br/public/style_emoticons/](http://forum.imasters.com.br/public/style_emoticons/)default/bye1.gifCarregando comentários...