Ir para conteúdo
Fórum Script Brasil
  • 0

Recuperar Valores Em Uma Função


Vinícius

Pergunta

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'>&nbsp;</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>

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Cuidado ao usar a instrução document.write

Quando 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>";
   }
}

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...