Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

[Resolvido] concatenação não funciona

Recommended Posts

Ola pessoal.

 

Vejam o meu codigo:

// JavaScript Document
function verifica_quantidade_produto(textbox)
{
	var div_produtos, valor;
   
	textbox = textbox.split(";");
    //varre o array só pra mostrar que tá tudo ok
	valor = 'valor';
	valorid = 'valorid';
    for (textbox_produtos in textbox)
	  {alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
		 if ((document.getElementById('valorid+(parseInt(textbox_produtos)+parseInt(1))').style.display == "block") && 
		 (document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value == ""))
			{
				alert ('Campo  '+ valor+(parseInt(textbox_produtos)+parseInt(1)) +' tem que ser preenchido\nCaso contrário, desmarque o produto!');
				document.verpreco.elements['valor+(parseInt(textbox_produtos)+parseInt(1))'].focus();
			}
	   }
	   document.verpreco.submit();
}
A ideia aqui é fazer com que a variavel valor, concatenada com a variavel textbox_produtos, resulte em valor1, valor2, valor.....n, quantos forem os indices da variavel textbox_produtos.

 

O que ocorre é o seguinte:

 

se eu colocar assim:

alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
Da NaN

Mas, se eu fizer assim:

alert(document.verpreco.valor1).value);
Ai retorna o valor.

 

Onde estou errando?

Obs.: textbox_produtos retorna 0,1,2..tantas quantos forem os textbox_produtos em textbo conforme o laço for acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puz um alert para printar a mostrar a variavel textbox_produtos e ela mostra os indices da variavel textbox. Ou seja, 0,1,2.....

 

Puz outro alert para msotrar a variavel textbox e imprimiu valor1,valor2,valor3,valor4,valor5. Que são os names de cada uma textbox que estao dentro de cada div id valorid1,valorid2,valorid3,valorid4,valorid5,

 

Segue o form:

<?
 $produtos=mysql_query("
					SELECT
					  id,
					  nome  
					FROM 
					  produtos
					  ");
 if (mysql_num_rows($produtos)==0){print "Num deu!";}
 else {
?>
<form name="verpreco" method="post" action="?acao=verpreco">
<table width="500" border="1" align="center">
  <tr>
    <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td>
  </tr>
  <tr><td colspan="10">Produto:</td></tr>
    <?
    $i=1;
	while (list($id, $nome) = mysql_fetch_row($produtos))
	{
?>
	  <td width="48" valign="top">
        <input type="checkbox" name="produtoid<?=$id;?>" value="<?=$id;?>" onclick="mostra('valordiv<?=$id;?>')"/><?=$nome;?><br>
          <div id="valordiv<?=$id;?>" name="valordiv<?=$id;?>" style="display:none">
            Valor: <input type="text" size="10" onkeypress="BloqueiaLetras();" name="valor<?=$id;?>">
          </div>
      </td>

<?   
	  $produtos_checkbox[]="valordiv".$id;
	  $produtos_valor[]="valor".$id;

	  if( $i%10==0 ) {echo '</tr><tr>';}

	  $i++;
	}
      $produtos_checkbox2=implode(";",$produtos_checkbox);
      $produtos_valor2=implode(";",$produtos_valor);
    ?>	
    
  <tr>
    <td colspan="10" align="center" valign="middle"><input type="button" value="Pesquizar" onclick="verifica_quantidade_produto('<?=$produtos_valor2;?>')" /></td>
  </tr>
</table>
</form>
<?	 }    ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu estou querendo dizer é que se eu fizer

alert(valor+(parseInt(textbox_produtos)+parseInt(1)));
alert('valordiv+(parseInt(textbox_produtos)+parseInt(1)));
isso retorna, dentro do loop, valor1,valor2,valor3..........

Mas, se eu fizer esse mesmo valor dentro de document.form..

Assim:

  alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
  alert(document.getElementById('valordiv+(parseInt(textbox_produtos)+parseInt(1))').style.display);
Em ambos os casos da NaN.

O que eu faço?

Segue o código todo:

// JavaScript Document
function verifica_quantidade_produto(textbox) //nesse exemplo, vindo do banco, textbox retornou : valor1;valor2;valor3;valor4;valor5;
{
	var div_produtos, valor;
   
	textbox = textbox.split(";");
    //varre o array só pra mostrar que tá tudo ok
	valor = 'valor';
	valorid = 'valorid';
    for (textbox_produtos in textbox)
	  {
		 alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
		 alert(document.getElementById('valordiv+(parseInt(textbox_produtos)+parseInt(1))').style.display);
		 
		 if ((document.getElementById('valordiv+(parseInt(textbox_produtos)+parseInt(1))').style.display == "block") && 
		 (document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value == ""))
			{
				alert ('Campo  '+ valor+(parseInt(textbox_produtos)+parseInt(1)) +' tem que ser preenchido\nCaso contrário, desmarque o produto!');
				document.verpreco.elements['valor+(parseInt(textbox_produtos)+parseInt(1))'].focus();
			}
	   }
	   document.verpreco.submit();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu estou querendo dizer é que se eu fizer

alert(valor+(parseInt(textbox_produtos)+parseInt(1)));
isso retorna, dentro do loop, valor1,valor2,valor3..........

Mas, se eu fizer esse mesmo valor dentro de document.form..

Assim:

alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
Isso rerorna NaN.

O que eu faço?

Segue o código todo:

// JavaScript Document
function verifica_quantidade_produto(textbox) //nesse exemplo, vindo do banco, textbox retornou : valor1;valor2;valor3;valor4;valor5;
{
	var div_produtos, valor;
   
	textbox = textbox.split(";");
    //varre o array só pra mostrar que tá tudo ok
	valor = 'valor';
	valordiv = 'valordiv';
    for (textbox_produtos in textbox)
	  {
		 alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
		 
		 if ((document.getElementById(valordiv+(parseInt(textbox_produtos)+parseInt(1))).style.display == "block") && 
		 (document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value == ""))
			{
				alert ('Campo  '+ valor+(parseInt(textbox_produtos)+parseInt(1)) +' tem que ser preenchido\nCaso contrário, desmarque o produto!');
				document.verpreco.elements['valor+(parseInt(textbox_produtos)+parseInt(1))'].focus();
			}
	   }
	   document.verpreco.submit();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom esse parte consegui fazer.

agor preciso saber se, nesse grupo de checkboxs, o cliente não marcou nenhuma.

Isso para não correr o risco de ir valor vazio para o banco.

Como faz esse verificação?

// JavaScript Document
function verifica_quantidade_produto(textbox)
{
  var div_produtos, valor;
 
  textbox = textbox.split(";");
  //varre o array só pra mostrar que tá tudo ok
  valor = 'valor';
  valordiv = 'valordiv';
  
  for (textbox_produtos in textbox)
	{
	 if ((document.getElementById(valordiv+(parseInt(textbox_produtos)+parseInt(1))).style.display == "block") && 
	 (document.verpreco.elements[valor+(parseInt(textbox_produtos)+parseInt(1))].value == ""))
	 {
	  alert ('Campo  '+ valor+(parseInt(textbox_produtos)+parseInt(1)) +' tem que ser preenchido\nCaso contrário, desmarque o produto!');
	  document.verpreco.elements[valor+(parseInt(textbox_produtos)+parseInt(1))].focus();
	  return (false);
	 }
	}
	document.verpreco.submit();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal.

Olha isso:

 for (textbox_produtos in textbox)
	{
	 if ((document.getElementById(valordiv+(parseInt(textbox_produtos)+parseInt(1))).style.display == "block") && 
	 (document.verpreco.elements[valor+(parseInt(textbox_produtos)+parseInt(1))].value == ""))
	 {
	  alert ('Campo Valor'+(parseInt(textbox_produtos)+parseInt(1)) +' tem que ser preenchido\nCaso contrário, desmarque o produto!');
	  document.verpreco.elements[valor+(parseInt(textbox_produtos)+parseInt(1))].focus();
	  return (false);
	 }
	 checkboxs+=document.getElementById('produtoid'+(parseInt(textbox_produtos)+parseInt(1))).checked;
	 
	}
	alert(implode('&&',checkboxs));
  if (!indexOf(implode('&&',checkboxs),"true"))
	{
		alert ('Nenhum produto marcado\nMarque um produto!');
  	    return (false);
	}
preciso juntar cada um valor entregue a variavel checkbox e depois usar o implode para recuperar esses valores concatenado com &&, depois saber se no resultado dessa concatenaçao existe algum valor true na string. se não houver, informar que não há nehuma checkbox marcada.

Como fazer isso?

 

Da forma não funcinou.

No php funciona beleza ,mas no js não sei fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui.

 

Se algum experiente souber como melhorar/otimizar esse codigo por favor estamos abertos.

 

// JavaScript Document
  function implode( separador, matriz ) 
  {
    return ( ( matriz instanceof Array ) ? matriz.join ( separador ) : matriz );
  }
function verifica_quantidade_produto(textbox)
{
  var div_produtos, valor;
  var checkboxs = new Array;
 
  textbox = textbox.split(";");
  //varre o array só pra mostrar que tá tudo ok
  valor = 'valor';
  valordiv = 'valordiv';
  //checkboxs = new Array();

  for (textbox_produtos in textbox)
	{
	 if ((document.getElementById(valordiv+(parseInt(textbox_produtos)+parseInt(1))).style.display == "block") && 
	 (document.verpreco.elements[valor+(parseInt(textbox_produtos)+parseInt(1))].value == ""))
	 {
	  alert ('Campo Valor'+(parseInt(textbox_produtos)+parseInt(1)) +' tem que ser preenchido\nCaso contrário, desmarque o produto!');
	  document.verpreco.elements[valor+(parseInt(textbox_produtos)+parseInt(1))].focus();
	  return (false);
	 }
 checkboxs[parseInt(textbox_produtos)+parseInt(1)]=document.getElementById('produtoid'+(parseInt(textbox_produtos)+parseInt(1))).checked;
	}

  if (implode('&&',checkboxs).indexOf("true")==-1)
	{
		alert ('Nenhum produto marcado\nMarque um produto!');
  	    return (false);
	}
	document.verpreco.submit();
}

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.