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

Validar um campo num formulário criado dinamicamente


kante

Pergunta

Olá pessoal,

Não tou conseguindo disparar uma função javascript para validação de um campo em formulários dinâmicos antes de executar o submit de determiando form...

Tal problema está ocorrendo em formulários dinamicamente criados em conformidade com a quantidade de produtos a serem listados, conforme o código que abaixo aqui acrescento:

<table>

<tr>

<td>

for($i=0; $i<mysqli_num_rows($res); $i++)

{

$dados = mysqli_fetch_row($res);

$id_produto = $dados[0];

$descricao = $dados[1];

$id_categoria = $dados[2];

$qtd = $dados[3];

//Logo vem a criação do formulário em forma de vetor, possuindo como indice o valor do "i" do contador for for acima

?>

<form name="frm_atualiza_produtos[$i]" id="id_frm_atualiza_produtos[$i]"

action="confirma_compra_produto.php" method="post" onClick=java script:valida_compra();>

<table>

<TR >

<td>

<p align="center">

<input type="text" name="txt_produto_id"

value="<?php echo $id_produto; ?>" size="1" readonly="true" >

</p>

</td>

<TD align="left" valign="top" >

<textarea name="txta_descr_prod" class="style5" cols="46%" rows="3"

dir="ltr" disabled="disabled"><?php echo $descricao; ?></textarea >

</TD>

<TD align="center" valign="top">

<input name="txt_qtd_a_comprar" type="text" class="style5"

value="<?php echo $i_quantidade_comprada; ?>" size="4">

</TD>

<td align="center" valign="top">

<input type="submit" name="Confirmar_alteracao" value="Comprar"

title="Clique aqui para Confirmar esta Compra. NÃO ESQUEÇA DE INFORMAR A QUANTIDADE NO CAMPO AO LADO!">

&lt;script language="javascript">

function valida_compra()

{

if ((document.frm_atualiza_produtos[$i]txt_qtd_a_comprar ==''))

{

alert('Você precisa especificar uma quantidade antes de Comprar!');

document.frm_atualiza_produtos[$i].txt_qtd_a_comprar.focus();;

}

else

{

document.frm_atualiza_produtos[$i].submit();

}

alert();

}

</script>

Como podem ver o nome do formulário vai sendo criado com o índice de um vetor "$i" . E o campo "txt_qtd_a_comprar" exposto dentro deste, tem o objetivo de capturar a quantidade que o usuário deseja comprar.

Quando chega na página "confirma_compra_produto.php" q o submit chama, tudo funciona direitinho, MAS no caso de ser informado um valor a comprar neste campo pertinente, .

ENTRETANTO, se o usuário der o SUBMIT, SEM ANTES INFORMAR A QUANTIDADE, a tela de resposta fica "furada". Assim queria que quando o usuário clicasse no botão "comprar" o sistema verificasse se o campo "txt_qtd_a_comprar" foi preechido, antes de efetivamente executar o submit. Entenderam ?

Alguém tem uma idéia do que pode estar errado ou alguma sugestão de como isto pode ser resolvido ?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Cara...

Achei alguns erros em seu código !

<form name="frm_atualiza_produtos[$i]" id="id_frm_atualiza_produtos[$i]"
action="confirma_compra_produto.php" method="post" onClick=java script:valida_compra();>

Existem dois erros aí:

1. Você escreveu java script (com espaço) e o certo seria não utilizar esse espaço (ou mesmo nem escrever o "javascript")

2. Você utilizou o evento onclick do formulário.Seria recomendado utilizar o onsubmit e quando ocorrer um erro cancelar o envio do formulário com um "return false"

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Jonathan. Mas acabo de confirma e não é isso.

1.Na verdade nem tinha este "javascript" separado no meu códig" original. Ele apareceu assim na hora de eu copiar para cá e fazer algumas mudanças diretas no exemplo para ele ficar mais claro. Erro da alternativa 1 descartado;

2. Tentei esta tua sugestão do unsubmit, ficando assim a linha de código pertinentes:

<form name="frm_atualiza_produtos[$i]" id="id_frm_atualiza_produtos[$i]"
            action="php_convidado/confirma_compra_produto_by_conv.php"  method="post" onsubmit=java script:valida_compra();>

Imagino eu que talvez seja alguma coisa relacionada no vetor que foi criado para formulários dinâmicos. Será q tá certo a minha referência ao vetor do formulário dinâmico ? Existem outras alternativas para referenciá-lo ?

Link para o comentário
Compartilhar em outros sites

  • 0

O seu código com o onsubmit ficaria assim:

form name="frm_atualiza_produtos[$i]" id="id_frm_atualiza_produtos[$i]" action="php_convidado/confirma_compra_produto_by_conv.php"  method="post" onsubmit="return valida_compra()">
E o JS ficaria assim:
function valida_compra()
{
if ((document.frm_atualiza_produtos[$i]txt_qtd_a_comprar ==''))
{
alert('Você precisa especificar uma quantidade antes de Comprar!');
document.frm_atualiza_produtos[$i].txt_qtd_a_comprar.focus();
return false; // Cancela o envio do formulário
}
}

Qualquer dúvida posta aí !

Link para o comentário
Compartilhar em outros sites

  • 0

i aew Kante, tenta assim:

<html>
<head>
<title>Teste de form dinâmico</title>
</head>
<body>
<?php
for($i=0; $i<2; $i++)
{
?>
<?php
$corlin = 1;
if (($i % 2) == 1){ $fundo="#33FF66"; }else{ $fundo="#33CC99"; }

?>

<form name="frm_atualiza_produtos<?php echo $i; ?>" id="id_frm_atualiza_produtos<?php echo $i; ?>"
action="confirma_teste_compra.php" method="post" onSubmit="return valida_compra<?echo$i?>()">
<table border="0" cellpadding="2" cellspacing="2" width="756">
<TR bgcolor="<?php echo $fundo; ?>" align="center" valign="top">
<td align="center" valign="top" >
<p align="center">
<input type="text" name="txt_produto_id"
value="<?php echo $i; ?>" size="1" readonly="true" >
</td>
<TD align="left" valign="top" >
<textarea name="txta_descr_prod" class="style5" cols="46%" rows="3"
dir="ltr" disabled="disabled"><?php echo "textarea_teste" ?></textarea >
</TD>
<td>
<input type="text" name="txt_qtd_a_comprar" size="10">
</td>
<td align="center" valign="top">
<input type="submit" name="Confirmar_alteracao" value="Comprar"
title="Clique aqui para Confirmar esta Compra. NÃO ESQUEÇA DE INFORMAR A QUANTIDADE NO CAMPO AO LADO!">
</td>
</TR>
<script language="javaScript">
function valida_compra<?echo$i?>()
{
if ((document.frm_atualiza_produtos<?php echo $i; ?>.txt_qtd_a_comprar.value ==''))
{
alert('Você precisa especificar uma quantidade antes de Comprar!');
document.frm_atualiza_produtos<?php echo $i; ?>.txt_qtd_a_comprar.focus();
return false; // Cancela o envio do formulário
}
}
</script>
</form>
<?php
$corlin++;
} //Fim do laço que percorre a listagem de produtos
?>
</TABLE>
</body>
</html>
bom o erro principal estava nessa linha:
if ((document.frm_atualiza_produtos[<?php echo $i; ?>].txt_qtd_a_comprar ==''))

isso sempre vai te retornar algo, precisava adicionar um value.

qualquer coisa posta aew, abraço

Editado por Romerito
Link para o comentário
Compartilhar em outros sites

  • 0

Eaw Romerito...

Fiz exatamente o que sugeristes...

Copiei integralmente o código que postastes aqui e salvei num novo arquivo, o qual executei pelo localhost...MAS ao testar o botão "Comprar" sem adicionar valor no campo da esquerda, a função não faz nada, ou seja, deixa dar o submit para outro form sem ser informado um valor no campo apropriado....

(Na verdade também fiz outra mudança, sendo que mudei a chamada do php da linha pertinente, visto que com um simples "<?" não funciona em todos servidores.

Mesmo assim, não funcionou.

E agora ?)

haaaa...A chamada q mudei no último arquivo tá ali pela linha 38. Continuo na busca de alternativas. Muito Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

huhuhu...Achei o erro amigo. Na verdade o código acima, da maneira em que estás não funciona em todo servidor pois possui chamadas simples ao php com a simples tag "<?"...

Veja só como estão duas chamadas erradamente diferenciadas:

Uma dentro da criação do form: "onSubmit="return valida_compra<?echo$i?>()">"...

E outra dentro da própria criação da função: "function valida_compra<?echo$i?>()"

//A chamada simples com "<?" não funciona em todos os servidores q devia ser o caso do meu.

Por isso é q não funcionou aqui e tive q mudá-la para "<?php". Entendeu ?

ufa...Problema resolvido. Valeu amigo.

Link para o comentário
Compartilhar em outros sites

  • 0
huhuhu...Achei o erro amigo. Na verdade o código acima, da maneira em que estás não funciona em todo servidor pois possui chamadas simples ao php com a simples tag "<?"...

Veja só como estão duas chamadas erradamente diferenciadas:

Uma dentro da criação do form: "onSubmit="return valida_compra<?echo$i?>()">"...

E outra dentro da própria criação da função: "function valida_compra<?echo$i?>()"

//A chamada simples com "<?" não funciona em todos os servidores q devia ser o caso do meu.

Por isso é q não funcionou aqui e tive q mudá-la para "<?php". Entendeu ?

sim , saquei hehe mas eu nem sabia que não funcionava assim, nunca tinha visto um servidor que não funcionava, abraço.

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...