Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RafaCordL

Função só funciona no chrome

Recommended Posts

Lex, o Number foi por conta desse problema aqui >> http://goo.gl/lU23eZ

Troquei para o getFullYear() mas não alterou em nada.

 

Gavaldão, na mesma rede, em outras redes... Não funcionam.

O WARSAL 1.5.1 estava instalado, desinstalei mas continua não funcionando.

E quanto ao http, "não posso fazer muita coisa", pois tenho uma pessoa a cima de mim que acha que sabe mais do que quem realmente é especializado nisso... Dai por isso tem várias gambiarras que não podemos retirar ou mudar para códigos mais eficientes. =/ Ai fica complicado, rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Nesse caso, recomendo que passe a data em outro formato para o construtor do Date(), já que o Firefox não vai aceitar o mês sem o zero. Ou faça o tratamento do zero.

Veja na documentação: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

 

Lembrando que o mês 1, não é janeiro, é fevereiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá consegui alguma coisa más como não sou expert no assunto gostaria de que nosso amigos que estão acompanhando; Willian, Lex, vissem isso.

 

Montei uma página html com a função dela, e iniciei a função com $(function(){

 

No console IE apresentou o erro:

Propriedade de Split indefinida ou nula.

 

Setei as variáveis data nasc. e diag. com datas fixas ao invés de pegar nos campos

ex: "12/12/2000"; e a função funcionou.

 

Entendi que a função estava disparando (change) duas vezes e não capturando os campos data.

setei o change só com dt_nascimento pois é o segundo campo a ser preenchido.

a função funcionou em todo os browsers.

 

Tenta ai Rafaela alterar o change e ver se funciona.

 

se não, teste minha pagina em separado ai no seu servidor para ver se funciona.(não esqueça da biblioteca Jquery)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="jquery-1.11.1.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
	$(function(){
$("#dt_nascimento").change(function(){
        var data_diag = $("#dt_diagnostico_sistema").val();
        var dt_nasc = $("#dt_nascimento").val();
        $("#idade").val("");
        if((data_diag != '')&&(dt_nasc != '')){

            var dt_nasc = dt_nasc.split("/");
            var data_nascimento = dt_nasc[2]+"-"+Number(dt_nasc[1])+"-"+Number(dt_nasc[0]);

            var data_diag = data_diag.split("/");
            var data_diagnostico = data_diag[2]+"-"+Number(data_diag[1])+"-"+Number(data_diag[0]);
            
            var now = new Date(data_diagnostico);
            var today = new Date(data_diagnostico);
            
            var yearNow = now.getYear();
            var monthNow = now.getMonth();
            var dateNow = now.getDate();

            var dob = new Date(data_nascimento);

            var yearDob = dob.getYear();
            var monthDob = dob.getMonth();
            var dateDob = dob.getDate();
            var age = {};
            var ageString = "";
            var yearString = "";
            var monthString = "";
            var dayString = "";

            yearAge = yearNow - yearDob;

            if (monthNow >= monthDob)
                var monthAge = monthNow - monthDob;
            else {
                yearAge--;
                var monthAge = 12 + monthNow -monthDob;
            }

            if (dateNow >= dateDob)
                var dateAge = dateNow - dateDob;
            else {
                monthAge--;
                var dateAge = 31 + dateNow - dateDob;

                if (monthAge < 0) {
                    monthAge = 11;
                    yearAge--;
                }
            }

            age = {
                years: yearAge,
                months: monthAge,
                days: dateAge
            };

            if ( age.years > 1 ) yearString = " years";
            else yearString = " year";
            if ( age.months> 1 ) monthString = " months";
            else monthString = " month";
            if ( age.days > 1 ) dayString = " days";
            else dayString = " day";

            if(age.years > 0){
                $("#idade").val(age.years);
                document.getElementById('idade_anos').checked = true;
                $('#idade_mes').attr("checked", false);
                $('#idade_dia').attr("checked", false);
                $('#idade_hora').attr("checked", false);
            }else if(age.months > 0 ){
                $("#idade").val(age.months);
                $('#idade_anos').attr("checked", false);
                document.getElementById('idade_mes').checked = true;
                $('#idade_dia').attr("checked", false);
                $('#idade_hora').attr("checked", false);
            }else if(age.days){
                $("#idade").val(age.days);
                $('#idade_anos').attr("checked", false);
                $('#idade_mes').attr("checked", false);
                document.getElementById('idade_dia').checked = true;
                $('#idade_hora').attr("checked", false);
            }else if(age.days == 0){
                $("#idade").val('1');
                $('#idade_anos').attr("checked", false);
                $('#idade_mes').attr("checked", false);
                $('#idade_dia').attr("checked", false);
                document.getElementById('idade_hora').checked = true;
            }
        }
    });
	});
</script>
</head>

<body>
diagnostico <input type="text" name="dt_diagnostico_sintoma" id="dt_diagnostico_sistema" size="10"><br>
nascimento <input type="text" name="dt_nascimento" id="dt_nascimento" size="10"><br>
4 <label><input type="radio" name="tipo_idade" value="1" id="idade_hora"/>1- Hora(s)</label>
                    <label><input type="radio" name="tipo_idade" value="2" id="idade_dia"/>2- Dia(s)</label>
                    <label><input type="radio" name="tipo_idade" value="3" id="idade_mes"/>3- Mês(es)</label>
                    <label><input type="radio" name="tipo_idade" value="4" id="idade_anos"/>4- Ano(s)</label>

idade<input type="text" name="idade" id="idade" size="5"/>
</body>
</html>

A função funciona após clicar no campo radio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galvadão, fiz o teste aqui e não funcionou, nem usando sua página (e não esqueci da biblioteca).

Vou testar a solução do Lex e depois retorno com novidades, e espero que sejam boas! :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro está na sua função calculaIdade() nas linhas:

var data_nascimento = vt_nasc[2]+"-"+Number(vt_nasc[1])+"-"+Number(vt_nasc[0]);

var data_diagnostico = vt_diag[2]+"-"+Number(vt_diag[1])+"-"+Number(vt_diag[0]);

como o @Lex já havia informado o uso do Number() que remove os zeros, gera uma Invalid Date nos outros navegadores.

 

Veja:

/* Chrome */
new Date('2015-4-24') // Fri Apr 24 2015 00:00:00 GMT-0300 (BRT)

/* Firefox */
new Date('2015-4-24') // Invalid Date

/* IE 8 */
new Date('2015-4-24') // NaN

Outra... o formato de data usando "-" traço, não é o ideal, uma data distinta retornada com o uso do new Date().

Além de que no IE 8 não é aceito o formato de data com traço.

 

Veja:

/* Chrome */
new Date('2015-04-24') // Thu Apr 23 2015 21:00:00 GMT-0300 (BRT)
new Date('2015/04/24') // Fri Apr 24 2015 00:00:00 GMT-0300 (BRT)

/* IE 8 */
new Date('2015-04-24') // NaN
new Date('2015/04/24') // Fri Apr 24 00:00:00 UTC-0300 2015

Solução:

var data_nascimento = vt_nasc[2]+"/"+vt_nasc[1]+"/"+vt_nasc[0];
// ou.. mais simples
var data_nascimento = dt_nasc.split('/').reverse().join('/');


var data_diagnostico = vt_diag[2]+"/"+vt_diag[1]+"/"+vt_diag[0];
// ou.. mais simples
var data_diagnostico = data_diag.split('/').reverse().join('/');

OBS:

Notei também um erro na abordagem da função $.each() em algumas funções

// Errado
var campos = [];
campos.forEach(function(id) {
 $('#'+id).on('keypress', so_numeros)
});

// Correto
var campos = [];
$.each(campos, function(i, id) {
 $('#'+id).on('keypress', so_numeros)
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.