Boa noite pessoal!.
Passei hoje uma boa parte da manhã hoje tentando fazer uma function javascript para mascarar um campo de telefone que acetasse a regra do 9° digito dos celulares paulistanos.
Usando o MaskedInput, achei pessoas que faziam de um jeito que o ultimo digito não fosse obrigatorio, no entanto, quando o campo perdesse o foco esse digito era movido para depois do DDD. Isso é muito confuso, o usuario teria que digitar o numero antigo e colocar o 9 no final para ao sair do campo, esse 9 vá para o começo.
$('#telefone1')
.mask("(99) 9999-9999?9")
.live('focusout', function (event) {
var target, phone, element;
target = (event.currentTarget) ? event.currentTarget : event.srcElement;
phone = target.value.replace(/\D/g, '');
element = $(target);
element.unmask();
if(phone.length > 10) {
element.mask("(99) 99999-999?9");
} else {
element.mask("(99) 9999-9999?9");
}
});[/code]
Depois eu encontrei outro, porém com um sério bug que permite o usuário selecionar um texto qualquer e arrastar para dentro do input.
[url]http://jsfiddle.net/NJMSj/30/[/url]
Por fim, tentei fazer a minha com a seguinte logica:
O usuário começa a digitar, a cada keypress eu valido pela expressão regular e quando perceber que o usuário está tentando inserir um número de um celular paulistano [(11) 9...] eu mudo a mascara sem perder o que ele já havia digitado... não está dando certo... mas está quase!
Deem uma olhada e veja o "efeito poltergeist" e onde pode ser melhorado.
[code]<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://gqferreira.com.br/libs/jquery.maskedinput.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#telefone").mask("(99) 9999-9999");
phoneSp = false;
$("#telefone").keypress(function (){
if ($(this).val().match(/^(\(11\) 9(5[0-9]|6[0-9]|7[01234569]|8[0-9]|9[0-9])[0-9]{1})/g)){
if (!phoneSp){
phoneSp = true;
var valor = $(this).val().substring(0, 9)+"_-____";;
$(this).unmask();
$(this).val(null);
$(this).mask("(99) 99999-9999");
$(this).focus();
$(this).val(valor);
}
}
else if ($(this).val()=="(__) _____-____"){
phoneSp = false;
$(this).unmask();
$(this).val(null);
$(this).mask("(99) 9999-9999");
$(this).focus();
}
});
});
</script>
</head>
<body>
<input type="text" id="telefone" />
</body>
</html>