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

(Resolvido) concatenaçao não funciona


Carlos Rocha

Pergunta

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

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Irmão, deu NaN nesse alert.

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&ccedil;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>
<?     }    ?>

Link para o comentário
Compartilhar em outros sites

  • 0

melhor usar o getElementById():

alert(document.getElementById("valor" + (parseInt(textbox_produtos) + 1)).value);
e se isso ainda não funcionar, acho q você teria q converter pra string o resultado da soma:
alert(document.getElementById("valor" + String(parseInt(textbox_produtos) + 1)).value);

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é, mas sabe o que acontece,

O problema é que no loop for, valor+textbox_produtos, começaria com, valor0, valor1....... Assim por diante.

Por isso fiz assim

alert(document.verpreco.valor+(parseInt(textbox_produtos)+parseInt(1)).value);
Por que se trata literalmente de uma soma se eu fizer assim
alert(valor+(parseInt(textbox_produtos)+parseInt(1)));

Ele mostra direitinho o valor1, valor2...... assim pod diante.

Mas, se eu colocar ele dentro do document.verpreco.---------;

Ai não vai.

Da NaN

Link para o comentário
Compartilhar em outros sites

  • 0

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();
}

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

  • 0

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();
}

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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();
}

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,3k
×
×
  • Criar Novo...