DannyND 1 Denunciar post Postado Maio 6, 2014 Estou criando um formulário de checkout com opção para pagamento com 2 cartões. Quando digito o valor no CARTÃO 1, já calculo e exibo o resto no CARTÃO 2.. até ai tudo certinho, mas preciso também calcular a quantidade de parcelas e exibir em um <select > O valor mínimo para parcelas é de R$ 10,00 sendo de no máximo 12 Parcelas. Código (um pouco grande por causa da validação rs) <script type="text/javascript"> String.prototype.formatMoney = function() { var v = this; if(v.indexOf('.') === -1) { v = v.replace(/([\d]+)/, "$1,00"); } v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20"); v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2"); return v; }; function id( el ){ return document.getElementById( el ); } function getMoney( el ){ var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0; return parseFloat( money )*100; } function soma() { var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = 'R$ '+ String(total/100).formatMoney(); } </script> <script type="text/javascript"> $(document).ready(function(){ $('#cartaov2').validate({ rules: { op_cartao1: { required: true}, vl_pedido1: { required: true}, num_cartao1: { required: true }, nome_cartao1: { required: true }, data_valid1: { required: true }, cod_segur1: { required: true }, qt_parcelas1: { required: true }, op_cartao2: { required: true}, num_cartao2: { required: true }, nome_cartao2: { required: true }, data_valid2: { required: true }, cod_segur2: { required: true }, qt_parcelas2: { required: true } }, messages: { op_cartao1: { required: 'Selecione uma opção de cartão'}, vl_pedido1: { required: 'Digite o valor para o cartão 1'}, num_cartao1:{ required: ''}, nome_cartao1:{ required: ''}, data_valid1:{ required: ''}, cod_segur1:{ required: ''}, qt_parcelas1: { required: 'Selecione uma opção de parcelamento'}, op_cartao2: { required: 'Selecione uma opção de cartão.'}, num_cartao2:{ required: ''}, nome_cartao2:{ required: ''}, data_valid2:{ required: ''}, cod_segur2:{ required: ''}, qt_parcelas2: { required: 'Selecione uma opção de parcelamento'} }, submitHandler: function( form ){ var dados = $( form ).serialize(); $.ajax({ type: "POST", url: "processa_cartao2.php", data: dados, success: function( dados ){ alert( dados ); if(dados == parseInt("1")){ window.location="finaliza.php"; }else{ $("#contentee").html("<font color='red' size='1'>Cartão inválido!</font>"); } } }); return false; } }); }); </script> <style> .loading { display: none; } input.error { border: 1px solid #f00; } </style> <div id="noticia2"> <h2 class='titulo_noticia'>2 Cartões de Crédito</h2> <p class='texto_noticia'> <form name="cartaov2" class="formulario" id="cartaov2" method='post' action=''> <input type='hidden' name='total_carrinho' value='<?=$total_carrinho?>'> <input type='hidden' name='sessao' value='<?=session_id()?>'> <input type='hidden' name='cliente' value='<?=$_SESSION['cmpCD_CLIENTE']?>'> <input type='hidden' name='vl_pedido' id='vl_pedido' value='<?=money($total_carrinho)?>'> <table width='100%'> <tr> <td width='50%'> <table width='100%'> <tr><td class='subtitulo_noticia' colspan="2">Cartão de Crédito 1</td></tr> <tr><td height='5'></td></tr> <tr> <td colspan='2' align='center'> <table> <tr><td colspan="6"><label for="op_cartao1" class="error"></label></td></tr> <tr> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao1" value='visa'> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/visa.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao1" VALUE="mast"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/master.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao1" VALUE="disc"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/diners.png" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao1" VALUE="amex"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/american.png" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao1" value="hiper"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/hiper.png" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao1" value="elo"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/elo.png" HEIGHT="26" BORDER="0" ALT=""> </td> </tr> </table> </td> </tr> <tr> <td class='texto_noticia' align='right'>Valor R$ </td> <td> <INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" class='input_noticia' maxlength='16' size='29' onkeyup="soma()"> </td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>número do cartão </td> <td><INPUT TYPE="text" NAME="num_cartao1" class='input_noticia' maxlength='16' size='29'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right' width='32%'>nome impresso cartão </td> <td><INPUT TYPE="text" NAME="nome_cartao1" class='input_noticia' size='29'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>validade </td> <td><INPUT TYPE="text" NAME="data_valid1" class='input_noticia' maxlength='5' size='4'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>cód. segurança </td> <td><INPUT TYPE="text" NAME="cod_segur1" class='input_noticia' size='4'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>pagar em: </td> <td> <select class="selecionar_parc" NAME="qt_parcelas1" class='input_noticia' id="qt_parcelas1"> <?php for ($i = 1; $i <= 12; $i++ ) { $parcela = ( $vl_pedido1 / $i ); if($parcela > $vl_min_parc): if ( $parcela < $qt_parc) break; echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />"; endif; } ?> </select> </td> </tr> <tr><td></td><td colspan="2"><label for="qt_parcelas1" class="error"></label></td></tr> </table> </td> <td width='50%'> <table width='100%'> <tr><td class='subtitulo_noticia' colspan="2">Cartão de Crédito 2</td></tr> <tr><td height='5'></td></tr> <tr> <td colspan='2' align='center'> <table> <tr><td colspan="6"><label for="op_cartao2" class="error"></label></td></tr> <tr> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao2" value='visa'> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/visa.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao2" VALUE="mast"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/master.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao2" VALUE="disc"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/diners.png" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao2" VALUE="amex"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/american.png" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao2" value="hiper"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/hiper.png" HEIGHT="26" BORDER="0" ALT=""> </td> <td class='texto_noticia'> <INPUT TYPE="radio" NAME="op_cartao2" value="elo"> </td> <td class='texto_noticia' width='20%'> <IMG SRC="images/internas/elo.png" HEIGHT="26" BORDER="0" ALT=""> </td> </tr> </table> </td> </tr> <tr> <td class='texto_noticia' align='right'>Valor R$ </td> <td> <INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" class='input_noticia' maxlength='16' size='29' readonly="readonly"> </td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>número do cartão </td> <td><INPUT TYPE="text" NAME="num_cartao2" class='input_noticia' maxlength='16' size='29'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>nome impresso cartão </td> <td><INPUT TYPE="text" NAME="nome_cartao2" class='input_noticia' size='29'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>validade </td> <td><INPUT TYPE="text" NAME="data_valid2" class='input_noticia' maxlength='5' size='4'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>cód. segurança </td> <td><INPUT TYPE="text" NAME="cod_segur2" class='input_noticia' size='4'></td> </tr> <tr><td height='5'></td></tr> <tr> <td class='texto_noticia' align='right'>pagar em: </td> <td> <select class="selecionar_parc" NAME="qt_parcelas2" class='input_noticia' id="qt_parcelas2"> <?php for ($i = 1; $i <= 12; $i++ ) { $parcela = ( $vl_pedido1 / $i ); if($parcela > $vl_min_parc): if ( $parcela < $qt_parc) break; echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />"; endif; } ?> </select> </td> </tr> <tr><td></td><td colspan="2"><label for="qt_parcelas2" class="error"></label></td></tr> </table> </td> </tr> <!-- resposta --> <tr><td></td><td colspan="2"><div id="contentee"></div></td></tr> <tr> <td colspan="3" align='right'> <input type="submit" value="" id="enviar" class="botao_fim"/> </td> </tr> </table> </form> </p> </div> Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Maio 6, 2014 http://forum.imasters.com.br/forum/6-javascript/ Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 6, 2014 http://forum.imasters.com.br/forum/6-javascript/ Publiquei no javascript e no PHP..é o mesmo post. Código simplificado: DEMO: http://catalogo.lojasguaibim.com.br/arquivos/index.php <? $total_carrinho = "949,80"; $vl_min_parc = 10; #mínimo de $10 por parcela $qt_max_parc = 12; #quantidade máxima de parcelas if($total_carrinho > $vl_min_parc): $qt_parc = floor($total_carrinho / $vl_min_parc); if($qt_parc > $qt_max_parc): $qt_parc = $qt_max_parc; else: $qt_parc = $qt_parc; endif; $vl_parc = ($total_carrinho / $qt_parc); else: $qt_parc = 1; $vl_parc = $total_carrinho; endif; ?> <script type="text/javascript"> String.prototype.formatMoney = function() { var v = this; if(v.indexOf('.') === -1) { v = v.replace(/([\d]+)/, "$1,00"); } v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20"); v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2"); return v; }; function id( el ){ return document.getElementById( el ); } function getMoney( el ){ var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0; return parseFloat( money )*100; } function soma() { var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = ''+ String(total/100).formatMoney(); } </script> <table> <tr> <td> Digitar valor para pagamento no CARTÃO 1<br> Exibir resto no CARTÃO 2<br> Dividir parcelas dos dois valores, sendo parcelas de no mínimo R$ 10,00 </td> </tr> </table> <p> <table> <tr> <td colspan=2><strong>TOTAL DO PEDIDO R$ <INPUT TYPE="text" NAME="vl_pedido" id="vl_pedido" value="<?=$total_carrinho?>" maxlength='16' size='29' readonly></strong></td> </tr> <tr> <td>Valor CARTÃO 1</td> <td><INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29' onkeyup="soma()"></td> <td> <select NAME="qt_parcelas2" id="qt_parcelas2"> <option value="">selecione</option> <?php for ($i = 1; $i <= 12; $i++ ) { $parcela = ( $vl_pedido1 / $i ); if($parcela > $vl_min_parc): if ( $parcela < $qt_parc) break; echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />"; endif; } ?> </select> </td> </tr> <tr> <td>Valor CARTÃO 2</td> <td><INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" maxlength='16' size='29'></td> <td> <select NAME="qt_parcelas2" id="qt_parcelas2"> <option value="">selecione</option> <?php for ($i = 1; $i <= 12; $i++ ) { $parcela = ( $vl_pedido1 / $i ); if($parcela > $vl_min_parc): if ( $parcela < $qt_parc) break; echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />"; endif; } ?> </select> </td> </tr> </table> Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Guima 164 Denunciar post Postado Maio 6, 2014 Publiquei no javascript e no PHP..é o mesmo post. Qual a lógica disso? :huh: Compartilhar este post Link para o post Compartilhar em outros sites
brhvitor6 14 Denunciar post Postado Maio 6, 2014 vc tem alguma duvida especifica ou realmente espera q eu poste um codigo pronto aqui pra vc? Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 6, 2014 Qual a lógica disso? :huh: Não era post criado por mim e estava como resolvido, então fiquei com dúvida se seria respondido ou não. você tem alguma duvida especifica ou realmente espera q eu poste um codigo pronto aqui pra você? Preciso que as parcelas sejam geradas no combobox conforme o que é digitado no VALOR 1. Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 6, 2014 Para pegar as parcelas você vai dividir o valor que você quer dividir, pelo valor da parcela minima isso vai te dar a quantidade de parcelas possível; Depois faz um for para adicionar cada parcela, limita ele pela quantidade máxima de parcelas e no máximo doze, cria o html com os options e enfia dentro do select. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 6, 2014 O bicho tá pegando pra mim para fazer o for dentro do javascript, pois já tenho essa lógica na parte PHP. PHP $vl_pedido1 = "800"; for ($i = 1; $i <= $qt_max_parc; $i++ ) { $parcela = ( $vl_pedido1 / $i ); if($parcela > $vl_min_parc): if ( $parcela < $qt_parc) break; echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />"; endif; } function soma() { //valor1 var valor1 = document.getElementById('vl_pedido1').value; valor1 = valor1.replace(/,/gi, "."); var qt_max_parc = '12'; var qt_max_vl = '10.00'; var qt_parcelas1 = String(valor1 / qt_max_vl); //como enviar qt_parcelas1 para o combobox? //valor 2 var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = String(total/100).formatMoney(); var vlpedido2 = id('vl_pedido2').value = String(total/100).formatMoney(); var valor2 = vlpedido2; //resto é a variável total ou vlpedido2 } Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 6, 2014 não cheguei a testar mas acho que com isso você consegue colocar os options dentro do select. Você provavelmente vai ter que ajustar as ids para usar as do seu código e formatar as saídas. /** * Created by Leandro on 06/05/14. */ function soma() { //valor1 var valor1 = document.getElementById('vl_pedido1').value; valor1 = valor1.replace(/,/gi, "."); var qt_max_parc = 12; var qt_max_vl = 10.00; var qt_parcelas1 = valor1 / qt_max_vl; qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo //como enviar qt_parcelas1 para o combobox? if(qt_parcelas1>12){ qt_parcelas=12; }else if(qt_parcelas<1){ qt_parcelas=1; } var option; var campo_select=document.getElementById("idDoSelect"); for(i=1;i<=qt_parcelas;i++){ option = document.createElement("option"); option.text = valor1/i; campo_select.add(option); } //valor 2 var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = String(total/100).formatMoney(); var vlpedido2 = id('vl_pedido2').value = String(total/100).formatMoney(); var valor2 = vlpedido2; //resto é a variável total ou vlpedido2 } Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 6, 2014 Opa @Playerbr, funcionou sim, só que se eu quiser mudar o valor, as parcelas no combobox continuam do anterior. E como faço para mostrar mais "bonitinho" no combo, tipo " X vezes de R$ XX,XX" Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 7, 2014 Quem é responsável por montar o que vai ser mostrado pelos selects é: option.text = valor1/i; Adicione um tratamento nos dados antes de colocar no select var texto_option; var valor_formatado; var campo_select=document.getElementById("idDoSelect"); for(i=1;i<=qt_parcelas;i++){ valor_formatado=valor1/i; valor_formatado=valor_formatado.toFixed(2); valor_formatado=String(valor_formatado); valor_formatado=valor_formatado.replace(".",","); texto_option= i+' x de R$'+valor_formatado; option = document.createElement("option"); option.text = valor1/i; campo_select.add(option); } Pra fazer de forma dinâmica, coloque o cálculo em uma função e dispare ela em um evento. A formatação de decimal é bom criar uma função separada e chamar ela sempre que precisar formatar um número Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 7, 2014 A formatação funcionou, mas ainda falta mostrar as parcelas do VALOR 2, segue o código completo: Exemplo de funcionamento: AQUI Mais dois detalhes: 1 - Se eu colocar um valor menor ou igual 100 não gera as parcelas 2 - Se eu alterar o VALOR 1, não atualiza as parcelas <?php$total_carrinho = "949,90";?><script type="text/javascript">String.prototype.formatMoney = function() { var v = this; if(v.indexOf('.') === -1) { v = v.replace(/([\d]+)/, "$1,00"); } v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20"); v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2"); return v;};function id( el ){ return document.getElementById( el );}function getMoney( el ){ var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0; return parseFloat( money )*100;}function soma(){ //valor1 var valor1 = document.getElementById('vl_pedido1').value; valor1 = valor1.replace(/,/gi, "."); var qt_max_parc = 12; var qt_max_vl = 10.00; var qt_parcelas1 = valor1 / qt_max_vl; qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo if(qt_parcelas1>12){ qt_parcelas11=12; }else if(qt_parcelas1<1){ qt_parcelas11=1; } var texto_option; var valor_formatado; var campo_select=document.getElementById("qt_parcelas1v2"); for(i=1;i<=qt_parcelas11;i++){ option = document.createElement("option"); valor_formatado=valor1/i; valor_formatado=valor_formatado.toFixed(2); valor_formatado=String(valor_formatado); valor_formatado=valor_formatado.replace(".",","); option.text = i+' x de R$ '+(valor_formatado); campo_select.add(option); } //total var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = String(total/100).formatMoney(); //valor 2 var qt_parcelas2 = valor2 / qt_max_vl; qt_parcelas2=Math.floor(qt_parcelas2);//arredonda em inteiro para baixo if(qt_parcelas2>12){ qt_parcelas22=12; }else if(qt_parcelas2<1){ qt_parcelas22=1; } var texto_option; var valor_formatado; var campo_select=document.getElementById("qt_parcelas2v2"); for(i=1;i<=qt_parcelas22;i++){ option = document.createElement("option"); valor_formatado=valor1/i; valor_formatado=valor_formatado.toFixed(2); valor_formatado=String(valor_formatado); valor_formatado=valor_formatado.replace(".",","); option.text = i+' x de R$ '+(valor_formatado); campo_select.add(option); }}</script><form name="cartaov2" id="cartaov2" method='post' action=''><table><tr> <td> Digitar valor para pagamento no CARTÃO 1<br> Exibir resto no CARTÃO 2<br> Dividir parcelas dos dois valores, sendo parcelas de no mínimo R$ 10,00 </td></tr></table><p><table><tr> <td colspan=2><strong>TOTAL DO PEDIDO R$ <INPUT TYPE="text" NAME="vl_pedido" id="vl_pedido" value="<?=$total_carrinho?>" maxlength='16' size='29' readonly></strong></td></tr><tr> <td>Valor CARTÃO 1</td> <td><INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29' onchange="soma()"></td> <td>pagar em <select NAME="qt_parcelas1v2" id="qt_parcelas1v2"> <option value="">selecione</option> </select> </td></tr><tr> <td>Valor CARTÃO 2</td> <td><INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" maxlength='16' size='29'></td> <td>pagar em <select NAME="qt_parcelas2v2" id="qt_parcelas2v2"> <option value="">selecione</option> </select> </td></tr></table></form> Alguém? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Maio 7, 2014 Alguém? Além de mendigar no fórum, você já tentou alterar? Se sim mostra ai pra gente as tentativas... Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 7, 2014 Além de mendigar no fórum, você já tentou alterar? Se sim mostra ai pra gente as tentativas... Que isso rapaz.. lógico que já tentei e muito .. to o dia todo tentando fazer funcionar. O melhor código é o que está publicado acima, pois as modificações fizeram parar de funcionar até o cálculo. Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 7, 2014 O erro que ele dá por causa das parcelas menor que 100 é por causa da variável qt_parcelas1, isso deve resolver. var qt_parcelas1 = valor1 / qt_max_vl; qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo if(qt_parcelas1>12){ qt_parcelas1=12; }else if(qt_parcelas1<1){ qt_parcelas1=1; } var texto_option; var valor_formatado; var campo_select=document.getElementById("qt_parcelas1v2"); for(i=1;i<=qt_parcelas1;i++){ option = document.createElement("option"); valor_formatado=valor1/i; valor_formatado=valor_formatado.toFixed(2); valor_formatado=String(valor_formatado); valor_formatado=valor_formatado.replace(".",","); option.text = i+' x de R$ '+(valor_formatado); campo_select.add(option); } Pra fazer o ajuste, coloque o cálculo e formatação em uma função, chame essa função no evento onblur, ou crie um botão para recalcular. Você vai ter que fazer muita coisa ainda nessa página, se não tiver conhecimento em js, estude ou trabalhe com ferramentas que já domina como php.. Um bom site para js é o w3schools.com e aprenda a depurar com o chrome, dê uma pesquisadinha, vai te permitir resolver muita coisa. Compartilhar este post Link para o post Compartilhar em outros sites
Nilton Bicalho 0 Denunciar post Postado Maio 8, 2014 <? $calc = $this->cart->total(); for($i=1;$i<7;$i++){ //if(($calc/$i)>50){ if($i>0)$parc = ($calc/$i); if($i==1)$parc = $calc; $qq = $i; //if($parc<50) break; ?> <?if($i==1){?> <li class="ct-ppc-pc-stripe"><label><input type="radio" name="optParcels" class="optParcels" value="<?=$qq?>" checked><span> À vista <?}else{?> <li class="ct-ppc-pc-stripe"><label><input type="radio" name="optParcels" class="optParcels" value="<?=$qq?>"><span> <?=$qq?>x sem juros <?}?> </span><span class="ct-ppc-pc-value">R$ <?=number_format($parc, 2, ',', '.')?></span></label></li> <? //} } ?> Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 8, 2014 Consegui gerar os 2 combobox de parcelas da seguinte forma: <script type="text/javascript"> String.prototype.formatMoney = function() { var v = this; if(v.indexOf('.') === -1) { v = v.replace(/([\d]+)/, "$1,00"); } v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20"); v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2"); return v; }; function id( el ){ return document.getElementById( el ); } function getMoney( el ){ var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0; return parseFloat( money )*100; } function soma() { //valor1 var valor1 = document.getElementById('vl_pedido1').value; valor1 = valor1.replace(/,/gi, "."); var qt_max_parc = 12; var qt_max_vl = 10.00; var qt_parcelas1 = valor1 / qt_max_vl; qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo if(qt_parcelas1>12){ qt_parcelas1=12; }else if(qt_parcelas1<1){ qt_parcelas1=1; } var texto_option; var valor_formatado; var campo_select=document.getElementById("qt_parcelas1v2"); for(i=1;i<=qt_parcelas1;i++){ option = document.createElement("option"); valor_formatado=valor1/i; valor_formatado=valor_formatado.toFixed(2); valor_formatado=String(valor_formatado); valor_formatado=valor_formatado.replace(".",","); option.text = i+' x de R$ '+(valor_formatado); campo_select.add(option); } //gera resto e parcelas do VALOR 2 var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = String(total/100).formatMoney(); var valor2 = id('vl_pedido2').value = String(total/100).formatMoney(); valor2 = valor2.replace(/,/gi, "."); var qt_parcelas2 = valor2 / qt_max_vl; qt_parcelas2=Math.floor(qt_parcelas2);//arredonda em inteiro para baixo if(qt_parcelas2>12){ qt_parcelas2=12; }else if(qt_parcelas2<1){ qt_parcelas2=1; } var texto_option2; var valor_formatado2; var campo_select=document.getElementById("qt_parcelas2v2"); for(i=1;i<=qt_parcelas2;i++){ option = document.createElement("option"); valor_formatado2=valor2/i; valor_formatado2=valor_formatado2.toFixed(2); valor_formatado2=String(valor_formatado2); valor_formatado2=valor_formatado2.replace(".",","); option.text = i+' x de R$ '+(valor_formatado2); campo_select.add(option); } } </script> Agora só falta atualizar assim que modifica o VALOR 1, pois não atualiza as parcelas se eu mudar o valor. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 14, 2014 Galera, tenho o código abaixo que divide um valor base em 2, dependendo do que é digitado no VALOR 1. O problema é que quando o valor base é maior que 999,00 não calcula corretamente. E quando altero o VALOR 1 não atualiza as parcelas. DEMO: aqui <?php $total_carrinho = "2.230,00"; ?> <script type="text/javascript"> String.prototype.formatMoney = function() { var v = this; if(v.indexOf('.') === -1) { v = v.replace(/([\d]+)/, "$1,00"); } v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20"); v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2"); return v; }; function id( el ){ return document.getElementById( el ); } function getMoney( el ){ var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0; return parseFloat( money )*100; } function soma() { //valor1 var valor1 = document.getElementById('vl_pedido1').value; valor1 = valor1.replace(/,/gi, "."); var qt_max_parc = 12; var qt_max_vl = 10.00; var qt_parcelas1 = valor1 / qt_max_vl; qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo if(qt_parcelas1>12){ qt_parcelas1=12; }else if(qt_parcelas1<1){ qt_parcelas1=1; } var texto_option; var valor_formatado; var campo_select=document.getElementById("qt_parcelas1v2"); for(i=1;i<=qt_parcelas1;i++){ option = document.createElement("option"); valor_formatado=valor1/i; valor_formatado=valor_formatado.toFixed(2); valor_formatado=String(valor_formatado); valor_formatado=valor_formatado.replace(".",","); option.text = i+' x de R$ '+(valor_formatado); campo_select.add(option); } //gera resto no VALOR 2 var total = getMoney('vl_pedido')-getMoney('vl_pedido1'); id('vl_pedido2').value = String(total/100).formatMoney(); var valor2 = id('vl_pedido2').value = String(total/100).formatMoney(); valor2 = valor2.replace(/,/gi, "."); var qt_parcelas2 = valor2 / qt_max_vl; qt_parcelas2=Math.floor(qt_parcelas2);//arredonda em inteiro para baixo if(qt_parcelas2>12){ qt_parcelas2=12; }else if(qt_parcelas2<1){ qt_parcelas2=1; } var texto_option2; var valor_formatado2; var campo_select=document.getElementById("qt_parcelas2v2"); for(i=1;i<=qt_parcelas2;i++){ option = document.createElement("option"); valor_formatado2=valor2/i; valor_formatado2=valor_formatado2.toFixed(2); valor_formatado2=String(valor_formatado2); valor_formatado2=valor_formatado2.replace(".",","); option.text = i+' x de R$ '+(valor_formatado2); campo_select.add(option); } } </script> <form name="cartaov2" id="cartaov2" method='post' action=''> <table> <tr> <td> Digitar valor para pagamento no CARTÃO 1<br> Exibir resto no CARTÃO 2<br> Dividir parcelas dos dois valores, sendo parcelas de no mínimo R$ 10,00<br> Máximo de parcelas: 12x </td> </tr> </table> <p> <table> <tr> <td colspan=2><strong>TOTAL DO PEDIDO R$ <INPUT TYPE="text" NAME="vl_pedido" id="vl_pedido" value="<?=$total_carrinho?>" maxlength='16' size='29' readonly></strong></td> </tr> <tr> <td>Valor CARTÃO 1</td> <td> <!-- <INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29' onchange="soma()">--> <INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29' onchange="soma();"> </td> <td>pagar em <select class="selecionar_parc" NAME="qt_parcelas1v2" class='input_noticia' id="qt_parcelas1v2"></select> </td> </tr> <tr> <td>Valor CARTÃO 2</td> <td> <INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" maxlength='16' size='29' readonly="readonly"> </td> <td>pagar em <select class="selecionar_parc" NAME="qt_parcelas2v2" class='input_noticia' id="qt_parcelas2v2"></select> </td> </tr> </table> </form> Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Maio 14, 2014 Vamos fazer aquele mobral básico: 1 - Coloquei o valor base 1100 e o valor do primeiro cartão de 500, o resultado no cartão 2 foi 600, então aparentemente está ok; 2 - Ele calcula sim, o que está ocorrendo é que você deveria limpar o select antes de add as parcelas, pois se você calcular 2 vezes as parcelas recalculadas vão aparecer abaixo das que já existiam. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Maio 14, 2014 Vamos fazer aquele mobral básico: 1 - Coloquei o valor base 1100 e o valor do primeiro cartão de 500, o resultado no cartão 2 foi 600, então aparentemente está ok; 2 - Ele calcula sim, o que está ocorrendo é que você deveria limpar o select antes de add as parcelas, pois se você calcular 2 vezes as parcelas recalculadas vão aparecer abaixo das que já existiam. Coloca 1.000,00 no valor base e veja o que acontece. Compartilhar este post Link para o post Compartilhar em outros sites