Ir para conteúdo
Fórum Script Brasil
  • 0

Resolver o tal "Só funciona o script depois do alert..."


PyetroSafe

Pergunta

Bom galera...

Eu estou aqui mostrando script pra quem estava com problemas pra resolver o tal "Só funciona o script depois do alert...".

Antes vou mostrar como era minha página e porque o problema, depois como resolvi.

Eu estava com esse problema, e meu caso era exatamente esse...

Eu tinha 3 divs como cabeçalho da página, conteúdo da página (div receberia o conteúdo) e fim da página...

<div id=header>
<div id=content>
<div id=bottom>
A div id=content iniciava com conteúdo vazio... O conteúdo era adicionado por uma função javascript, então o script é o seguinte: -A função js recebe um valor iniciado com a página: <body onload="Inicia('');"> ; -Quando vazio a função chama a página inicial ; Ao clicar em algum link (<input type=button onClick="Inicia('other_page');">) esse botao envia um valor pra função que verifica e chama a página correspondente. No caso uso "http.open..." etc etc... Esse comando lê a página requerida e envia pra dentro da minha div:
"document.getElementById('content').innerHTML = http.responseText; "
Beleza... até aí tudo bem, o problema estava no código para essa página requerida... Bom vamos lá, o que eu precisava? Que uma função js que iniciava logo depois de uma chamada da primeira, lesse o valor de um elemento dessa página requerida.!
"
        function GetValue () { ... var v = document.getElementById('meu_elemento').value; ... }
        function Inicia (page) { ... code ... GetValue();}
        "
Como o conteúdo dela era lido depois da página inicial estar pronta... scripts dela não eram executados... Para isso eu devia escrever os scripts na página inicial ( ou num arquivo js e carregar no header da página inicial)... Porém outro problema, nos meus scripts eu precisava resgatar o valor de um elemento que estava na página requerida, como ela tinha sido carregada depois, nisso ocorria o erro. Os elementos dessa pagina que foi trazida depois não eram vistos pelo script da página incial... Então acusava que o elemento não existia ou era null... Para isso eu tentei alguns recursos como "SetTimeOut();", "While(!getElementById('meu_elemento')){...}" porém não serviram pois davam erro de limite de tempo ou sobrecarga na memória... Porém quando eu clicava num botão da página requerida, que chamava a função que eu precisava, se tivesse um Alert dentro da função, o elemento era visto pela função... Nisso fui atrás e pesquisei sobre problemas com alert...E Nada. Então pensei que talvez o elemento só era visto depois do alert(); pois dava tempo de carregar todo o conteúdo pra página... Meio estranho mas era quase isso, ou que depois do alert o script lia todo conteúdo da página mais uma vez?... Mas tentei o seguinte, pensei num jeito sem DAR o ALERT, de "atualizar a leitura da página" ou de "dar tempo pro script achar o elemento"... Coloquei um evento "onmousemove" que a cada micro movimento do mouse ele chamava a função que eu queria e testava se o elemento estava carregado... Como eu precisava chamar a função uma uníca vez, matava o evento logo que a função era chamada E "O elemento era visto" pela função. Eis o código: HTML index.html _____
<head>
&lt;script type="text/javascript" src="meu_script.js"> </script>
</head
<body onload="Inicia('');">
HTML depois.html _____
<!-- Essa página era lida pela função Inicia do javascript e copiava o conteúdo para a div "content" -->
...
<input type="text" name="meu_elemento" id="meu_elemento">
...
JS meu_script.js _____
function Events () {

    /* ------------------------------------------------ */
    //   ADD EVENT LISTENER !!!
    /* ------------------------------------------------ */
    if ((document.getElementById) && window.addEventListener || window.attachEvent){
        (function(){
            function mouse(e){
                /* Verifica se o eleemento foi identificado */
                if(!(document.getElementById('meu_elemento'))) {
                    /* se não, nada faz... */
                    url = '';
                } else {

                    /* se sim executa o meu código... */
                    url = document.getElementById('meu_elemento').value;
                    code ...

                    /* remove o evento onmousemove */
                    if (window.addEventListener) {
                        document.removeEventListener("mousemove",mouse,false);
                    } else if (window.attachEvent) {
                        document.detachEvent("onmousemove",mouse);
                    }
                    //alert('Acabou ! Remover Evento);
                    /* se precisar pode por um código pra encerrar... */
                    ... codigo aqui...
                }
            }
            /* Aqui inicia o Evento Para IE e outros */
            if (window.addEventListener) {
                document.addEventListener("mousemove",mouse,false);
            } else if (window.attachEvent) {
                document.attachEvent("onmousemove",mouse);
            }
        } ) ();
    } //End.
}

function Inicia(page) {
        if(page) {
        ...
        }
    ... codigos ... ... ...

        Events();
}

Como funcionou isso...

Após chamar a função Inicia(); no final dela chamei a função Events();

A função Events iniciava o evento mousemove que detectava cada movimento do mouse e retornava chamar a função events.

Quando a função events era re-chamada, fazia a verificação se o elemento que eu precisava tinha sido reconhecido...

Quando fosse reconhecido, eu recebia o valor do elemento que precisava, executava códigos necessários e eliminava a função mousemove...

Bom, qualquer dúvida postem aí...

Espero ter ajudado um pouco!

Editado por Petro
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...