Vinícius Postado Agosto 9, 2006 Denunciar Share Postado Agosto 9, 2006 Estou utilizando uma função para adicionar tabela em um formulário, até aí tudo bem.Fiz uma função para ler os dados dos inputs criados nessas tabelas.O problema é que no IE eu só consigo pegar o primeiro valor, e no Firefox eu pego todos os valores mas a página fica em um loop infinito.Código:<html><head><title>Teste :: CreateElement</title></head><script language="javascript">var my_div = null;var newDiv = null;ar_campo1 = new Array(0);function addElement() { //adicionar mais um elemento y = ar_campo1.push(""); //indicar o nome do campo como array[novo elemento] newDiv = document.createElement("div"); newDiv.innerHTML = "<table><tr><td width='150'>Campo"+y+"</td><td width='350'><input type='text' name='campo"+y+"'></td></tr><td height='20' colspan='2'> </td></tr></table>"; // adicionar o campo ao formulário my_div = document.getElementById("org_div1"); document.form1.insertBefore(newDiv, my_div); } function readElement() { for(x=0; x < ar_campo1.length; x++) { w = x+1; campo = "document.form1.campo" + w + ".value"; eval("document.write(" + campo +")"); document.write("<br>"); } } </script><body onload="addElement()"><form name="form1" method="post" target="destino.php"><div id='org_div1'></div><input type="button" onclick="addElement()" value="Adicionar Elemento"><br><br><input type="button" onclick="readElement()" value="Ler Elementos"></form></body></html> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 flavio Postado Agosto 10, 2006 Denunciar Share Postado Agosto 10, 2006 heheheh.... não encontrei erro não... :unsure: e agora? vou olhar mais... (que coisa, não!??!) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 flavio Postado Agosto 11, 2006 Denunciar Share Postado Agosto 11, 2006 Cuidado ao usar a instrução document.writeQuando você usa essa instrução para escrever diretamente no corpo (BODY) do documento, o código-fonte do documento é perdido (modificado, alterado...).Já quando a instrução é executada dentro de uma estrutura inerente ao corpo (BODY) - como Células, Divs ou Campos de Texto - aí o código-fonte é mantido e apenas aquela estrutura tem seu conteúdo modificado.Veja que quando a função readElement() é executada, a instrução document.write é executada diretamente no corpo do documento.Tanto é, que se você visualizar o código-fonte (com seu navegador) você verá que as tags de HTML (html, head, body ...) sumiram.Agora, veja o laço que você escreveu: function readElement() { for(x=0; x < ar_campo1.length; x++) { w = x+1; campo = "document.form1.campo" + w + ".value"; eval("document.write(" + campo +")"); document.write("<br>"); } } Assim que o botão executa a função, o código fonte é modificado. O primeiro valor (x==0) é escrito porque é o valor da variável campo. Você sabe que uma variável é na verdade um pedaço de memória RAM. O primeiro valor é então escrito porque seu conteudo está na memória e pode ser escrito no novo documento. Mas esse novo documento não vai identificar o objeto da segunda iteração do laço (x==1). Então a variável campo será nula e deixa de ser um objeto, porque ela não mais faz referência ao document.form1.campo2.value já que este não existe no novo código-fonte. O que você pode fazer é: (uma das opções) 1) Criar uma janela pop-up que mostre os valores dos campos. 2) Criar uma div que exiba os valores do formulário (use a propriedade innerHTML). 3) Criar Campos Invisíveis com os valores do formulário caso não quira exibir os dados novamente. 4) Criar um vetor com n elementos (n é o numero de Campos de Texto existentes) que armazene os conteudos do formulário e, em seguida, usar a instrução document.write. Neste caso, o vetor também é uma porção de memória RAM e portanto seu valor pode ser escrito posteriormente. 5) Usar uma janela do tipo CONFIRM. Na minha opinião, as opções 1 e 5 são mais intuitivas ao visitante. Usando a opção 2: function readElement() { document.getElementById("org_div1").innerHTML = ""; for(x=0; x < ar_campo1.length; x++) { w = x+1; campo = "document.form1.campo" + w + ".value"; campo = eval (campo); document.getElementById("org_div1").innerHTML += campo + "<br>"; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Vinícius
Estou utilizando uma função para adicionar tabela em um formulário, até aí tudo bem.
Fiz uma função para ler os dados dos inputs criados nessas tabelas.
O problema é que no IE eu só consigo pegar o primeiro valor, e no Firefox eu pego todos os valores mas a página fica em um loop infinito.
Código:
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.