WF
Alterar a mascara de um TEntry conforme selecionada uma opção.
Bom dia...
Tenho um formulário de cadastro de clientes, onde há um campo (chamado número) que eu quero que tenha uma mascara conforme for selecionado no campo tipo de documento, ou seja, a minha ideia é quando o campo número receber foco o seu "setMask" seja alterado de acordo com o campo tipo de documento, eu ensaiei o seguinte código:
// detail fields
$detail_id = new THidden('detail_id');
$detail_tipodocumento = new TDBCombo('detail_tipodocumento','bancohip','tiposdocumentos','id','descricao');
$detail_numero = new TEntry('detail_numero');
$detail_scaner = new TText('detail_scaner');
$detail_tipodocumento->onBlur = 'mascara()';
TScript::create('mascara = function() {
if (form_cadastrodeclientes.detail_tipodocumento.value = 1)
{
//$detail_numero ->setMask ((99)9999-9999);
form_cadastrodeclientes.detail_numero.value = parseFloat(23);
}
};');
Eu quero é manipular o setMask, mas não sei como escrever o código, neste exemplo eu apenas consigo colocar o número 23 no campo.
Se alguém tiver uma outra solução é bem vinda, obrigado.
Tenho um formulário de cadastro de clientes, onde há um campo (chamado número) que eu quero que tenha uma mascara conforme for selecionado no campo tipo de documento, ou seja, a minha ideia é quando o campo número receber foco o seu "setMask" seja alterado de acordo com o campo tipo de documento, eu ensaiei o seguinte código:
// detail fields
$detail_id = new THidden('detail_id');
$detail_tipodocumento = new TDBCombo('detail_tipodocumento','bancohip','tiposdocumentos','id','descricao');
$detail_numero = new TEntry('detail_numero');
$detail_scaner = new TText('detail_scaner');
$detail_tipodocumento->onBlur = 'mascara()';
TScript::create('mascara = function() {
if (form_cadastrodeclientes.detail_tipodocumento.value = 1)
{
//$detail_numero ->setMask ((99)9999-9999);
form_cadastrodeclientes.detail_numero.value = parseFloat(23);
}
};');
Eu quero é manipular o setMask, mas não sei como escrever o código, neste exemplo eu apenas consigo colocar o número 23 no campo.
Se alguém tiver uma outra solução é bem vinda, obrigado.
Usa javascript
Veja um exemplo que uso para formatar CPF/CNPJ.
O princípio é o mesmo, apenas mude o campo (seletor) e a máscara, veja:
Não esqueca de uar "escape"
Ops! não foi, segue agora em plain/text
$script = new TElement('script');
$script->type = 'text/javascript';
$javascript = "
$(document).on('change','select[name="tipo_pessoa"]' , function(event){
//alert('Entrou');
$('input[name="cpf_cnpj"]').val('');
$('select[name="tipo_pessoa"] > option:selected').each(function(){
tipoPessoa = $(this).text();
});
if(tipoPessoa.toLowerCase() == 'física') {
$('input[name="cpf_cnpj"]').val('');
$('input[name="cpf_cnpj"]').attr({onkeypress:'return tentry_mask(this,event,"999.999.999-99")'});
}
if(tipoPessoa.toLowerCase() == 'jurídica') {
$('input[name="cpf_cnpj"]').val('');
$('input[name="cpf_cnpj"]').attr({onkeypress:'return tentry_mask(this,event,"99.999.999/9999-99")'});
}
});";
$script->add($javascript);
$tableScriptPessoa = new TTable;
$tableScriptPessoa->addRow()->addCell($script);
Ola, obrigado, vou tentar implementar.
Nada funcionou, vou colocar o código completo do formulário, se puder ajudar fico agradecido se não tiver como realizar essa operação vou deixar pra lá.
Um detalhe que não consegui que fosse colocado no forum.
Em volta dos id é preciso usar aspas duplas com "escape", você fez isso?
Outro detalhe, você chego a inspecionar o elemento "detail_tipodocumento"?
Você adicionou $tableScriptPessoa" ao form?
Eu zipei minha classe que está funcionando, baixe e veja como fiz (não esqueça de inspecionar o elemento para saber se está chegando o valor corretor para a comparação)!
www.mgservicosti.com.br/adianti/ClientesForm.class.php.zip
Boa tarde...
Obrigado pela ajuda, nada funciona, já estou a um ano tentando realizar esse procedimento mas sem exito. Tenho outras coisas mais importantes pra fazer no sistema que estou fazendo. Essa parte eu desisto.
Você chegou a executar a minha classe?
Veja alguns detalhes!
Você mante a captura do campo como "tipoPessoa", nas na comparação você usou o id do campo "detail_tipodocumento".
Outra coisa, você deve adicionar o $tableScriptPessoa no container antes do "parent::add($this->form);
Quando fizer estes ajustes, execute a página e inpecione o Combo "detail_tipodocumento', vá até o final da pagina e inpecione o script, veja se os valores dos options estão dentro dos parâmetros de comparação.
Outro detalhe o método.
Não desista, que garanto que funciona!
Como disse, tente executar o meu e verá!
Abraços e sucesso!
Boa noite...
Obrigado pela ajuda, compreensão, estimulo e paciência com minha falta de conhecimento, consegui resolver o problema, há outros que preciso corrigir mas vou consultar meus estudos para resolver.
Deus abençoe, segue o código que resolveu o problema:
// Tabela de Documentação
$detail_id = new THidden('detail_id');
$detail_tipodocumento = new TDBCombo('detail_tipodocumento','bancohip','tiposdocumentos','id','descricao');
$detail_numero = new TEntry('detail_numero');
$detail_scaner = new TText('detail_scaner');
/* Mascara de entrada de dados para o tipo de documento
É comparado texto porque o input lê tela
e tela é texto
no switch coloque a palavra de comparação em minuscula
*/
$script = new TElement('script');
$script->type = 'text/javascript';
$javascript = "
$(document).on('change','select[name="detail_tipodocumento"]' , function(event){
//alert('Entrou');
$('input[name="detail_numero"]').val('');
$('select[name="detail_tipodocumento"] > option:selected').each(function(){
detail_tipodocumento = $(this).text();
});
switch(detail_tipodocumento.toLowerCase()){
case 'cpf':
$('input[name="detail_numero"]').val('');
$('input[name="detail_numero"]').attr({onkeypress:'return tentry_mask(this,event,"999.999.999-99")'});
break;
case 'cnpj':
$('input[name="detail_numero"]').val('');
$('input[name="detail_numero"]').attr({onkeypress:'return tentry_mask(this,event,"99.999.999/9999-99")'});
break;
default:
$('input[name="detail_numero"]').val('');
$('input[name="detail_numero"]').attr({onkeypress:'return tentry_mask(this,event,"99999999999999")'});
break
}
});";
$script->add($javascript);
$table_general->addRow()->addCell($script);
Excelente, sucesso!