Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

[Resolvido] Entregando valor ao campo hidden

Recommended Posts

Pessoal.

 

Bom Dia.

 

Estou numa dificuldade enorme e preciso da ajuida de vocês.

 

Seguinte:

 

Tenho um form que gera uma lista (via while php), de fornecedores.

Cada volta desse while retorna apenas um fornecedor.

 

Daí, dentro dessew while, e para cada fornecedor, eu faço outrop while para listar os produtos desse fornecedores.

 

Bom, acontece que no primeiro while onde eu listo os fonecedores, eu crio um campo texto o comprador colocar alguma obsrvaçao:

<input type=\"text\" name=\"{$i}[observa_cli]\"  id=\"{$i}[observa_cli]\" value=\"\" style=\"border-color:black\">

e dois radio buttons para o comprador escolher s quer pagar os produtos daquele fornecedor a vista ou a prazo.

 

Acontece, que para cada produto escolhido eu preciso enviar junto dele, em um array php ($_POST), essa informação da condiçao de pagamento e a obsrvação.

 

Daí tive a ideia de contar quantos produto o fornecedor tem e criar campos hidden no formulario com o mesmo id name do campo texto e dos radio buttos.

 

Isso ja esta sendo feito:


		for ($ob=$i;$ob<(mysql_num_rows($sql_produtos_query)+ $i);$ob++)
		{
		  if ($ob!=$i)
		  {
			  echo "<input type=\"hidden\" name=\"{$ob}[observa_cli]\" id=\"{$ob}[observa_cli]\" value=\"Teste\">";
		  }
		}

Acontece que esta sendo feito dinamicamente. Daí, para cada volta do primeiro while (para cada fornecedor) é criado um campos text

<input type=\"text\" name=\"{$i}[observa_cli]\"  id=\"{$i}[observa_cli]\" value=\"\" style=\"border-color:black\">

E dois radio buttons para escolha da condiçao de pagamento.

Bom, Agora, eu preciso entregar para cada campo hiddem os valores que o cliente escolheu em condiçao de pgamento e obsrvaçao.

 

Como faço isso a partir do botão de submit do form?

 

A dinamica da coisa seria mais ou menos assim

Produto 1 -> TipoPgto 1(Radio Button 1)                                  -> Observação 1 (Type Text 1)
Produto 2 -> TopoPgto 2(Type Hidden recebendo o valor de Radio button 1) -> Observação 2 (Tupe hidden recebendo valor de Type Text 1)
Produto 3 -> TopoPgto 3(Type Hidden recebendo o valor de Radio button 1) -> Observação 3 (Tupe hidden recebendo valor de Type Text 1)
.......
n

 

Tem como, colocar uma função js em um campo para que, no carregament do form e à medida que um outro campo for alterado, ele receba automaticamente a alteração?

 

Preciso fazer uma soma em JS para implementar o nome do campo.

echo "
<input type=\"radio\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\" value=\"1\" checked=\"checked\" onclick=\"fecha('{$i}[div_pgto_prazo]')\" onchange=\"{$i+1}[radio_pgto].value=this.value\"\"> À vista
<input type=\"radio\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\" value=\"2\" onclick=\"abre('{$i}[div_pgto_prazo]')\" onchange=\"{$i+1}[radio_pgto].value=this.value\"\"> À prazo
<div id=\"{$i}[div_pgto_prazo]\" style=\"display:none\">
Prazos para pagamento para produtos deste fornecedor: <label id=\"{$i}[label_prazo]\">$pgto_prazo</label>
</div>
";

 

Como faço?

onchange=\"{$i+1}[radio_pgto].value=this.value\"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei essa função:

// JavaScript Document
function entrega_valores(numrow, valor_i, valor_campo, nome_campo)
{
for(i=0;i<eval(numrow+valor_i-1);i++)
{

'document.getElementById('+eval(i+1)+'['+nome_campo+']).value=valor_campo';
}
}

E estou chamando ela de do evento no campo radio e no campo text para que eles complementem os hiddens.

 

Não da erro, mas também não funciona.

echo "
<input type=\"radio\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\" value=\"1\" checked=\"checked\" onclick=\"fecha('{$i}[div_pgto_prazo]'); entrega_valores($numrows,$i, this.value,'radio_pgto' )\"\"> À vista
<input type=\"radio\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\" value=\"2\" onclick=\"abre('{$i}[div_pgto_prazo]'); entrega_valores($numrows,$i, this.value,'radio_pgto' )\"\"> À prazo
<div id=\"{$i}[div_pgto_prazo]\" style=\"display:none\">
Prazos para pagamento para produtos deste fornecedor: <label id=\"{$i}[label_prazo]\">$pgto_prazo</label>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o eval() não faz sentido, e essas aspas ai tb não.

 

para ver os erros do javascript, aperte Ctrl+Shif+J (firefox ou chrome)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterei para:

// JavaScript Document
function entrega_valores(numrow, valor_i, valor_campo, nome_campo)
{
 var soma1=eval(numrow+valor_i-1);

 for(i=0;i<soma1;i++)
 {
   var soma2=eval(numrow+valor_i-1);
   document.getElementById(soma2+'['+nome_campo+']').value=valor_campo;
 }
}

Fiz teste de retorno com alert:

document.getElementById(soma2+'['+nome_campo+']').value => retorna certinho os valores reais.

valor_campo tambem retorna

nome_campo. Tudinho certo.

 

Mas, não sei porque. Não dá erro. Mas tambem não altera os valores dos campos imput type="hiddem" criados nos For do php.

 

Só falta isso ai pra desenrolar.

 

O resto do meu trabalho ja da para sem auxilio

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, muito confuso o teu código.

 

você só atinge um unico elemento. Então pra q o for() ?

 

como eu disse, não precisa do eval(), dava para usar apenas um parseInt().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não Bruno.

Eu atingo tantos quantos for o retorno do mysql_num_rows da consulta do php menos 1.

 

Veja o for dentro do js.

 

Eu coloco um alert dentro do js para ver se os valores estão chegando e se o loop esta sendo feito.

 

Tudo certinho.

 

Só, não altera o valor no form. E é isso que eu preciso.

 

Veja a chamado la no php:

      $sql_produtos_query=mysql_query($sql_produtos);	

  	   echo "<tr><td align=left colspan=6>Fornecedor:   " . $nome_fornece. "</td>  
	           <td align=left colspan=5><font color=\"red\">Condição de pagamento:</font>     ";
	 	$numrows=mysql_num_rows($sql_produtos_query);	  
	 if($pgto_tipo==1)
	 {
		 echo "Este fornecedor só negocia à vista 
		       <input type=\"hidden\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\"  value=\"1\">
		       ";
	 }
	 elseif($pgto_tipo==2)
	 {
		 $s=$i+1;
	       echo "
			  <input type=\"radio\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\" value=\"1\" checked=\"checked\" onclick=\"fecha('{$i}[div_pgto_prazo]'); entrega_valores($numrows,$i, this.value,'radio_pgto' )\"\"> À vista
			  <input type=\"radio\" name=\"{$i}[radio_pgto]\" id=\"{$i}[radio_pgto]\" value=\"2\" onclick=\"abre('{$i}[div_pgto_prazo]'); entrega_valores($numrows,$i, this.value,'radio_pgto' )\"\"> À prazo
			  <div id=\"{$i}[div_pgto_prazo]\" style=\"display:none\">
				 Prazos para pagamento para produtos deste fornecedor: <label id=\"{$i}[label_prazo]\">$pgto_prazo</label>
			  </div>
			    ";

         }		
	  echo "</td></tr>";

	  for ($vp=$i;$vp<(mysql_num_rows($sql_produtos_query)+ $i);$vp++)
	  {
		if ($vp!=$i)
		{			  
		  echo "<input type=\"hidden\" name=\"{$vp}[radio_pgto]\" id=\"{$vp}[radio_pgto]\" value=\"1\">";
		}
	  } 

	  echo "
		  <tr><td align=left colspan=11><font color=\"red\">Observação do cliente para o fornecedor:</font>    
		     <input type=\"text\" onkeypress=\"entrega_valores($numrows,$i, this.value,'observa_cli' )\"\ name=\"{$i}[observa_cli]\"  id=\"{$i}[observa_cli]\" value=\"\" style=\"border-color:black\">
		   </td></tr>";


	  for ($ob=$i;$ob<(mysql_num_rows($sql_produtos_query)+ $i);$ob++)
	  {
		if ($ob!=$i)
		{
			echo "<input type=\"hidden\" name=\"{$ob}[observa_cli]\" id=\"{$ob}[observa_cli]\" value=\"\">";
		}
	  }

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja:

 

 for(i=0;i<soma1;i++)
 {
   var soma2=eval(numrow+valor_i-1);
   document.getElementById(soma2+'['+nome_campo+']').value=valor_campo;
 }
}

soma2 é uma variavel q depende de: numrow q você recebe como argumento, e de valor_i, q você tb recebe como argumento

 

a variavel do teu loop, é i, ou seja, soma2 é uma constante independente do valor da iteração do loop.

Portanto, mesmo que o loop dê 10 voltas, o elemento q você atinge é sempre o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, entendi o que você disse.

 

Alterei:

// JavaScript Document
function entrega_valores(numrow, valor_i, valor_campo, nome_campo)
{
 var soma1=eval(numrow+valor_i-1);

 for(i=0;i<soma1;i++)
 {
   var soma2=eval(valor_i+i+1);
alert(soma2);
   document.getElementById(soma2+'['+nome_campo+']').value=valor_campo;
 }
}

Deu certo mas esta dando apenas um erro agora;

 

O campo radio butto, entrega o valor certinho para os inputs mas o campo de texto entrega o texto com um letra a menos.

 

Veja:

aa.png

Na observaçao 1 esta escrito Teste1 e só vai teste.

Na observaçao 2 esta escrito Teste2 e só vai teste.

 

E outra coisa.

Só vai o observaçao se eu clikar nos radio buttons

 

Mas esta esquisito. Mudei o evento do type text para onkeyup e esta enviando a palavra toda agora mas tem hora que vai tem hora que não vai.

 

Esquisito

 

Tem hora que o radio button envia tem hora que não.

 

Parece que descobri.

 

Estou usando onKeyDown e esperimentei apenas clickar duas vezes no type text e pegar o texto que ja estava lá do histórico.

Assim nao funciona.

Eu fico obrigado a digitar no campo.

Tem como arrumar isso?

Tipo. Só de dar dois clickes e pegar o texto que estava no histórico?

 

www.carcleo.com/sistema

 

ambiente cliente

 

login: 111.111.111.11

senha: aa

 

Vai no menu

 

pedidos fazer

Outra observaçao é que estou recebendo quando clikar em enviar todos ítens, um array com os dados que cada produto.

 

Troquei o evento para onBlur e agora esta funcionando.

 

Parece que agora vai dar para eu andar um pokinho com as minhas pernas.

 

Quero deixar aqui meu agradecimento pela paciencia.

 

Sei que o código não esta bonito.

 

Mas, atualmente, é o melhor que consigo fazer.

 

Se quiser, pode mecher no site. É só para testes.

 

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.