Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal estou com uma duvida aqui se alguem puder me ajudar ...
Tenho uma pagina de Cadastro de produtos aonde tenho os campos( codigo de barra, descrição,custo,lucro1,lucro2,lucro3,preco1,preco2,preco3)
Como vou fazer para que logo que eu digitar no campo lucro que é de % , ele já apareça no meu campo preco o valor com os devidos calculos automaticamente no campo que por padrão esta disabled="disabled" para o usuario não digitar nada ali.
Obrigado
Obrigado Daniel, aguardo ajuda do pessoal que manja de Ajax!!
Não precisa de ajax para isso, não se os valores já estiverem nos campos.
<script type="text/javascript">
window.onload = function()
{
id('lucro').onblur = function()
{
id('preco_final').value = id('preco').value*parseFloat( this.value/100 )+parseFloat( id('preco').value );
}
}
function id( el ){
return document.getElementById( el )
}
</script>
Lucro: <input type="text" name="lucro" id="lucro" /> %<br />
Preço: R$ <input type="text" name="preco" id="preco" readonly="readonly" value="15.00" /><br />
Preço Final: R$ <input type="text" name="preco_final" id="preco_final" readonly="readonly" value="15.00" /><br />utilizei o evento **onblur**, ou seja, **ao sair do campo**digite algo em *lucro*, e clique fora dele, ou em qualquer outro lugar do body do documento.
o cálculo feito foi:
Preço Final = Preço Inicial + Preço Inicial*Lucro
>
Não precisa de ajax para isso, não se os valores já estiverem nos campos.
Eu pensei na possibilidade de ele querer trazer diretamente do banco.
Mas se for mais simples, então, perfeitamente William.
Obrigado a todos pela ajuda, mas tenho algumas duvidas, no caso do amigo William Bruno eu não consigo "eu" digitar o preço? ele fica travado e não deixa eu digitar no exemplo ele usou o value=15, outra duvida para que serve readonly="readonly" ?
Daniel sobre a sua possibilidade de ele querer trazer diretamente do banco, vou precisar sim disso , mas lá na entrada do produto, quando eu der o select lá no banco com os produtos anteriormente cadastrados.
Se algum souber alguma possibilidade!!
Obrigado
readOnly é 'somente leitura'.
é a mesma função do disabled, com a diferença que o disabled DESATIVA completamente o campo, tanto que ao submeter o formulário, o value dos campos marcados como disabled, não serão enviados.
com readonly, você apenas impede que o usuario escreva, mas o envio do campo continua sendo possível.
se você quer digitar o valor, basta tirar o readonly uê!
Preço: R$ <input type="text" name="preco" id="preco" value="15.00" /><br />
E então, adicionar mais uma função, para ao sair do preço, também atualizar o Preço Final
id('preco').onblur = function()
{
id('preco_final').value = this.value*parseFloat( id('lucro').value/100 )+parseFloat( this.value );
}
trazer dados do banco **ao mudar um select**, ai sim você precisará de ajax, a menos que esteja 'tudo bem o refresh da tela'.William como estaria fazendo para o script que você desenvolveu interpretar o valor tb com virgula(Ex: 8,60) no script preciso digitar o 8.60??
Prefira o ponto neste caso. É mais simples.
tem alguns topicos aqui no fórum falando sobre isso 'operações com moeda'.. e tal..
basta fazer um replace nesse caso.
a entrada do usuário é com virgula, você faz os calculos com ponto.
e ai pode devolver com virgula de novo(usando replace novamente).
dependendo, do caso, costumamos ignorar a virgula, multiplicando, tudo por 100.
todos os calculos são realizados, ai no final, divimos por 100 novamente.
funciona bem.
Aaaa legal.. bom no caso tem algo que mesmo o usuario digitar a virgula(,) ele quando vai para o proximo campo ele altera para ponto?
>
Aaaa legal.. bom no caso tem algo que mesmo o usuario digitar a virgula(,) ele quando vai para o proximo campo ele altera para ponto?
Pra isso você usa funções de tratamento de string, como strreplace
Pessoal não estou conseguindo tratar a variavel preco_final , se coloco Preco a 20.00, e Lucro a 56%, o valor final fica : 31.200000000000003 , eu conheço o number_format($preco_final,2,'.','') de php, mas em javascript no script que o amigo passou não funfa, baixo o codigo:
<script type="text/javascript">
window.onload = function()
{
id('lucro').onblur = function()
{
id('preco_final').value = id('preco').value*parseFloat( this.value/100 )+parseFloat( id('preco').value );
}
id('preco').onblur = function()
{
id('preco_final').value = this.value*parseFloat( id('lucro').value/100 )+parseFloat( this.value );
}
}
function id( el ){
return document.getElementById( el )
}
</script>
Preco: R$
<input type="text" name="preco" id="preco" value="" />
<br>
Lucro:
<input type="text" name="lucro" id="lucro" /> %<br />
Preco Final: R$
<input name="preco_final" type="text" id="preco_final" value="" maxlength="6" readonly="readonly" />
<label></label>Reaproveitando código:
<script type="text/javascript">
window.onload = function()
{
id('lucro').onblur = function()
{
id('preco_final').value = preco_final( id('preco').value, this.value );
}
id('preco').onblur = function()
{
id('preco_final').value = preco_final( this.value, id('lucro').value );
}
}
function preco_final( preco, lucro )
{
return (parseFloat( preco )*parseFloat( lucro )/100)+parseFloat( preco );
}
function id( el ){
return document.getElementById( el )
}
</script>
Preco: R$ <input type="text" name="preco" id="preco" value="20.00" /><br />
Lucro: <input type="text" name="lucro" id="lucro" value=""/> %<br />
Preco Final: R$ <input name="preco_final" type="text" id="preco_final" value="" maxlength="6" readonly="readonly" />William ,Obrigado pela ajuda, deu certo aqui,o que eu posso usar para ficar legal quando o valor não estiver setado e aparecer Nan,
Valeu http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
alguns testes, if.. ou sempre atribuir 0, qndo não tiver valor... ai vai da usabilidade que você precisar.
[Resolvido]
http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Pesquise sobre Ajax, aqui no fórum iMasters mesmo.
Peça ajuda lá ou dê uma olhada nos códigos prontos, deve ter alguma coisa parecida com o que você precisa.