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:
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
_____
<!-- 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...
Pergunta
PyetroSafe
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...
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: 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.! 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 _____ HTML depois.html _____ JS meu_script.js _____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 PetroLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.