Funciona no IE mas no Firefox não

10 respostas
D

Bom dia turma, tenho o seguinte codigo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
    <title></title>
  </head>
  <SCRIPT LANGUAGE="JavaScript"  >
   function Data(evento, objeto){
    var keypress=(window.event)?event.keyCode:evento.which;
    campo = eval(objeto);
    if (campo.value == '00/00/0000') {
        campo.value=""
    }
    
    caracteres = '[telefone removido]';
    separacao1 = '/';
    conjunto1 = 2;
    conjunto2 = 5;
    conjunto3 = 10;
    if ((caracteres.search(String.fromCharCode(keypress))!=-1) && campo.value.length < (19)) {
        if (campo.value.length == conjunto1 )
            campo.value = campo.value + separacao1;
        else if (campo.value.length == conjunto2)
            campo.value = campo.value + separacao1;
        else if (campo.value.length == conjunto3)
            campo.value = campo.value + separacao2;
    }
    else
        event.returnValue = false;
}

function validarData(campo){
    var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
    var msgErro = 'Formato inválido de data.';
    if ((campo.value.match(expReg)) && (campo.value!='')){
        var dia = campo.value.substring(0,2);
        var mes = campo.value.substring(3,5);
        var ano = campo.value.substring(6,10);
        if(mes==4 || mes==6 || mes==9 || mes==11 && dia > 30){
            alert("Dia incorreto !!! O mês especificado contém no máximo 30 dias.");
            campo.focus();
            return false;
        } else{
            if(ano%4!=0 && mes==2 && dia>28){
                alert("Data incorreta!! O mês especificado contém no máximo 28 dias.");
                campo.focus();
                return false;
            } else{
                if(ano%4==0 && mes==2 && dia>29){
                    alert("Data incorreta!! O mês especificado contém no máximo 29 dias.");
                    campo.focus();
                    return false;
                } else{
                    <!-- alert("Data correta!"); //-->
                    hoje = new Data();
                    dataInformada = new Data(campo);
                    intervalo = hoje - dataInformada;
                    if ( intervalo > 3 ) {
                        alert("Data fora do período estabelecido pela empresa.");
                        data.focus();
                        return false;
                    }
                    return true;
                }
            }
        }
    } else {
        alert(msgErro);
        campo.focus();
        return false;
    }
}

function validarData2(campo, campo2, campo3, idComp){
    var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
    var msgErro = 'Formato inválido de data.';
    if ((campo.value.match(expReg)) && (campo.value!='')){
        var dia = campo.value.substring(0,2);
        var mes = campo.value.substring(3,5);
        var ano = campo.value.substring(6,10);
        if(mes==4 || mes==6 || mes==9 || mes==11 && dia > 30){
            alert("Dia incorreto !!! O mês especificado contém no máximo 30 dias.");
            campo.focus();
            return false;
        } else{
            if(ano%4!=0 && mes==2 && dia>28){
                alert("Data incorreta!! O mês especificado contém no máximo 28 dias.");
                campo.focus();
                return false;
            } else{
                if(ano%4==0 && mes==2 && dia>29){
                    alert("Data incorreta!! O mês especificado contém no máximo 29 dias.");
                    campo.focus();
                    return false;
                } else{
                    <!-- alert("Data correta!"); //-->
                    var dia2 = campo2.substring(0,2);
                    var mes2 = campo2.substring(3,5);
                    var ano2 = campo2.substring(6,10);
                    hoje = new Date(ano2, mes2-1, dia2);
                    dataInformada = new Date(ano, mes-1, dia);
                    intervalo = hoje - dataInformada;
                    diasTol = campo3*24*60*60*1000;
                    if ( intervalo > diasTol ) {
                        alert("Data fora do período estabelecido pela empresa.");
                        document.getElementById(idComp).focus();
                        return false;
                    }
                    return true;
                }
            }
        }
    } else {
        alert(msgErro);
        campo.focus();
        return false;
    }
}   
  </SCRIPT>
  <body>
      <form name="form" id="form">
          <input type="text" name="data" maxlength="10" size="9" id="data"
          onKeyPress="Data(event, this)" onblur="validarData2(this, '05/10/2007', 3, 'data');">
      </form>
  </body>
</html>

Se observar o Java Script, em inumeros momentos e setado o focus() para não sair do componente, eu utilizei o focus de duas formas, passando o id e passando o componente direto, no Internet Explorer funciona da duas maneiras, mas no Firefox não. Alguém sabe como fazer?

10 Respostas

cv1
  1. Use (corretamente!) uma biblioteca que abstraia esses detalhes de implementacao pra voce. JQuery eh uma otima pedida.

  2. http://www.lixo.org/archives/2007/09/14/javascript-put-everything-in-a-namespace/

  3. Trate JavaScript com respeito. Eh uma linguagem dinamica, e por isso, ainda nao tem todo o suporte a refactoring e as molezas que IDEs tem em Java. Seja extremamente chato quanto a convencoes e regras de boa programacao (ou seja, vomite abusos em cima do maldito que escreveu essa serie de if-elseifs nojenta).

  4. Use coisas como JSLint com uma certa cautela.

peczenyj

No firefox uma boa pedida é o plugin firebug.

Vc pode inspecionar o codigo de uma pagina e verificar quais os motivos pelos quais o seu javascript não funciona.

D

Ola peczenyj, eu já utilizo o firebug tem alguns meses, já até debuguei com o firebug, e ele funcionou corretamenta, mas no browser Firefox não alterou o focus para o componente passado passado.

legionarioba

Você já viu o resultado da Console de Erros do Firefox? Em que linha que o erro acontece?

D

O Erro não existe no console, ele executa todo o javascript e não dá erro nenhum, mas não executa o focus esperado. Mas no IE executa normalmente como esperado.

Marcio_Nogueira

Infelizmente, nem tudo que funciona no IE funciona no Firefox. Cada browser tem suas particularidades, e implementam suporte a javascript e outras tecnologia de diferentes formas.

A Microsoft é mestre em implementar somente os recursos que a interessa, tornando assim, o padrão do IE incompatível com outros browsers.

Marcio_Nogueira

Onde se encontra:
campo.focus();

altere para:

form1.campo.focus();

return false;
D

Já testei com

E nenhum deles funcionou…

gulira

daviramos:
Já testei com

E nenhum deles funcionou…

Davi a única forma de forçar o firefox chamar o focus seria utilizar a técnica de POG.

subsituindo

campo.focus();

por

setTimeout("campo.focus()", 50);

cv “você não viu isso hemm” heheheheheheh :lol:

danieldestro

É bug conhecido já:
http://www.feed-squirrel.com/index.cfm?evt=viewItem&ID=34547
http://www.mail-archive.com/[email removido]/msg22680.html

Criado 8 de outubro de 2007
Ultima resposta 28 de nov. de 2007
Respostas 10
Participantes 7