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

Onready sem uso de libs


KaKarotto

Pergunta

Galerita, já vi muitas vezes aqui no fórum um erro comum que é tentar pegar um elemento html por javascript antes desse elemento ter sido criado efetivamente no corpo do documento.

Nas bibliotecas Javascript como Jquery, já está implementada a função "ready" que verifica se o documento está criado antes de executar alguma ação , afim de evitar aquele erro que comentei anterioremente.

Mas nem sempre precisamos de uma biblioteca, ou por alguma razão, não podemos ou não queremos usar uma biblioteca inteira para executar apenas algumas ações. Por isso, muitos desenvolvedores fizeram a sua versão da famosa função "ready" do Jquery. O micox fez uma :http://forum.imasters.uol.com.br/index.php?showtopic=259090

Eu particularmente não gosto de códigos grandes e sou preguiçoso e ao invés de copiar essas soluções para a minha máquina eu sempre executava uma versão mais simples que eu pensei no meio de um projeto há um tempinho e que até hj eu uso e não tem me dado nenhum problema até agora. Queria compartilhar com vocês essa outra forma de se executar o ready na página.

O código é o seguinte:

function ready(fn){
    var clock = setInterval(
        function(){
            if(document.body) {
                fn()                        
                return clearInterval(clock)                                                        
            }
            
        },1
    )
}
A função ready é uma função que recebe uma outra função que será executada apenas se o objeto document.body existir na verificação do if. O document.body só existirá se, numa forma simples de exemplificar, a última tag </body> ser criada e montada no documento. O body só é criado após todos os seus filhos terem sido criados. No caso de existir o document.body, então a função que foi passada como argumento será executada e a repetição do teste terminada. Eu ainda não sei qual a desvantagem de usar isso, até agora usei para projetos pequenos ou médios e não tem dado erro ou aparente comprometimento no processamento. Então a forma de usar a função é essa:
ready(function(){
    var obj = document.getElementsByTagName('div')
    alert(obj.length)    
})

Aí dentro da ready você poderia colocar qualquer outra função ou comando javascript.

Se alguém souber alguma desvantagem, algum erro ou qualquer coisa aparente nesse código que comprometa alguma coisa avisa ;).

Abraço.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

? :huh:

Poxa fui testar a ideia KaKarotto, e percebi que ele não prescisa carregar o BODY inteiro para que o READ fucione.

Infelizmente não é 100% funcional.

Como assim ele não precisa carregar o body? De que READ está falando?

Não entendi nada Guilherme, pode ser mais claro ?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim sim, desculpa hehehe.

Então é assim

Criei uma página com varios

<p>texto</p>
a pagina HTML ficou pesando 7Kb. Criei uma outra TAG no final
<div id="meu">conteudo</div>
então no JS eu apliquei isso:
ready(function(){
    var obj = document.getElementById('meu')
    alert(obj.innerHTML);   
})

Ele retornou ERRO no console do FF, como se não existi-se a DIV ainda(aliais não existia mesmo hehehehe).

Ae é isso que eu quiz dizer a função READ execultou a script antes da hora, sem terminar de carregar o BODY(ou melhor o conteudo do BODY)

Falow abração, otimo ano novo pra você e para todos do scriptbrasil.

Editado por hipnos na area
Link para o comentário
Compartilhar em outros sites

  • 0

Que estranho....

Já testei em tantos projetos, estou testando em um que é grandinho até. Funciona muito bem...

Eu acabei de fazer um arquivo html aqui com algumas imagens hospedadas em outro servidor, para forçar o carregamento mais lento mesmo, usei vários parágrafos, o arquivo acabou ficando em 47kb e mesmo assim a função READY funcionou bem.

É possível realmente dar problema em algumas situações, poste o html que montou para que eu e outros usuários possamos saber do bug e talvez tentar corrigi-lo ou então simplesmente apagar essa solução, no caso de não ser possível a solução do problema.

Valeu Guilherme, um ótimo Ano Novo para você também!

Vê se aparece mais no fórum, antigamente estava mais ativo, o fórum precisa de pessoas como você.

Abraço garoto.

Link para o comentário
Compartilhar em outros sites

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...