none
Chrome - Problemas com Javascript(máscara)

    General discussion

  • Pessoal, bom dia!

     

    Seguinte: Acho que muitos desenvolvedores aqui estão sofrendo com o Chrome...principalemente no Javascript...então peço a ajuda de vocês..

     

    Tenho uma máscara que formata vários tipos de formatos(CPF,Data,etc)...basta passar como parâmetro o formato que você quer.

     

    No IE e no Firefox, blz...mas no Chrome não faz a formatação ao clicar em uma tecla. Alguns dias atrás, tive problemas em substituir o document.all por document.getElementId..agora não sei o que o Chrome não reconhece...

     

    Alguém poderia me ajudar dizendo onde está errado e como consertar? Ou uma outra máscara que serve nos 3 browsers...

     

    Ex que estou usando: ('000.000.000-00' é como quero que fique)

     

    txtCPF.Attributes.Add("onkeypress", "return mask('000.000.000-00',this,event)");

     

    E essa é a função BLOCKED SCRIPT

     

    function mask(format, obj, e) {

    var keynum, keychar, numcheck;

    var iChar = obj.value.length;

    keynum = (window.event) ? e.keyCode : e.which;

    keychar = String.fromCharCode(keynum);

    if (keynum == 8 || keynum == 0) { return true; }

    if (iChar >= format.length) { return false; }

    var out = format.substring(iChar, iChar + 1);

    switch (out) {

    case "0":

    numcheck = /\d/;

    if (numcheck.test(keychar)) { return keychar; }

    break;

    case "A":

    numcheck = /[A-Za-z·-˜]/;

    if (numcheck.test(keychar)) { return keychar; }

    break;

    case "#":

    return keychar;

    break;

    default:

    obj.value += out;

    return mask(format, obj, e);

    }

    return false;

    }

     

    Usei este outro exemplo e deu o mesmo resultado...funciona no IE e Firefox, mas Chrome não...

     

    txtCPF.Attributes.Add("onkeypress", "formatar(this, '###.###.###-##')");

     

    //**********Javascript

     

    //S¢ nÆo funcionou no Chrome

    function formatar(src, mask) {

    var i = src.value.length;

    var saida = mask.substring(0, 1);

    var texto = mask.substring(i)

    if (texto.substring(0, 1) != saida) {

    src.value += texto.substring(0, 1);

    }

    }

     

     

    abs, pessoal...binhoalves!

    Thursday, December 18, 2008 1:56 PM

All replies

  • Pessoal, seguinte:

     

    O Chrome não entende o onkeypress .Eu comentei o conteúdo da função Javascript e apenas coloquei um Alert lá. IE e Firefox chamaram o alert, mas o Chrome não. Agora não sei como passar a tecla que cliquei para o Javascript. Alguém sabe como resolver isso?

     

    Abs,

     

    binhoalves!

     

    Thursday, December 18, 2008 6:05 PM
  • Olá,

    Qual o erro que você está recebendo?

    Utilizei o código que você disponibilizou e funcionou sem problemas nos três browsers.

    Segue abaixo o código que utilizei:

    #Codebehind
    ===========
    Code Snippet

    using System;

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string script = @"<script language='javascript' type='text/javascript'>
                                function mask(format, obj, e) {
                                    var keynum, keychar, numcheck;
                                    var iChar = obj.value.length;
                                    keynum = (window.event) ? e.keyCode : e.which;
                                    keychar = String.fromCharCode(keynum);
                                    if (keynum == 8 || keynum == 0) { return true; }
                                    if (iChar >= format.length) { return false; }
                                    var out = format.substring(iChar, iChar + 1);
                                    switch (out) {
                                        case '0':
                                            numcheck = /\d/;
                                            if (numcheck.test(keychar)) { return keychar; }
                                            break;
                                        case 'A':
                                            numcheck = /[A-Za-z·-˜]/;
                                            if (numcheck.test(keychar)) { return keychar; }
                                            break;
                                        case '#':
                                            return keychar;
                                            break;
                                        default:
                                            obj.value += out;
                                            return mask(format, obj, e);
                                    }
                                    return false;
                                }
                            </script>";

            ClientScript.RegisterClientScriptBlock(this.GetType(), "script", script);

            TextBox1.Attributes.Add("onkeypress", "return mask('000.000.000-00',this,event)");
        }
    }



    #ASPX
    =====
    Code Snippet

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>




    []'s
    Friday, December 19, 2008 7:18 PM
    Moderator
  • Rafael,

     

    Chamava essa função de um arquivo .js, mas copiei seu código e colei na aplicaçã...direto no Page-Load...e não rolou...

     

    Atualizei minha versão do Chrome agora...será que é isso?

     

    Abs e vlw, cara!

    Friday, December 19, 2008 7:55 PM
  • Olá Binho,

    Tinha esquecido de falar que realizei o teste utilizando a última atualização do Chrome (1.0.154.36).

    Após a atualização o erro persiste?

    []'s
    Monday, December 22, 2008 10:40 AM
    Moderator