Disseram-me para usar document.ready quando comecei a usar Javascript / jQuery, mas nunca realmente aprendi por quê.
Alguém poderia fornecer algumas orientações básicas sobre quando faz sentido envolver o código javascript / jquery dentro do jQuery document.ready
?
Alguns tópicos nos quais estou interessado:
.on()
Método jQuery : Eu uso.on()
bastante o método para AJAX (normalmente em elementos DOM criados dinamicamente). Os.on()
manipuladores de clique devem estar sempre dentrodocument.ready
?- Desempenho: é mais eficiente manter vários objetos javascript / jQuery dentro ou fora de document.ready (também, a diferença de desempenho é significativa?)?
- Escopo do objeto: páginas carregadas com AJAX não podem acessar objetos que estavam dentro do documento da página anterior. Pronto, correto? Eles só podem acessar objetos que estavam fora do document.ready (ou seja, objetos verdadeiramente "globais")?
Atualização: para seguir uma prática recomendada, todo o meu javascript (a biblioteca jQuery e o código do meu aplicativo) está na parte inferior da minha página HTML e estou usando o defer
atributo nos scripts contendo jQuery em minhas páginas carregadas com AJAX para que eu pode acessar a biblioteca jQuery nessas páginas.
javascript
jquery
dom
event-handling
document-ready
Tim Peterson
fonte
fonte
Respostas:
Em palavras simples,
Suponha que você tenha colocado seu código jQuery na
head
seção e tentando acessar umdom
elemento (uma âncora, um img etc), você não será capaz de acessá-lo porquehtml
é interpretado de cima para baixo e seus elementos html não estão presentes quando seu código jQuery corre.Para superar esse problema, colocamos cada código jQuery / javascript (que usa DOM) dentro da
$(document).ready
função que é chamada quando todos osdom
elementos podem ser acessados.E esta é a razão, quando você coloca seu código jQuery na parte inferior (depois de todos os elementos dom, logo antes
</body>
), não há necessidade de$(document).ready
Não há necessidade de colocar o
on
método dentro$(document).ready
apenas quando você usa oon
método em,document
pelo mesmo motivo que expliquei acima.EDITAR
Dos comentários,
$(document).ready
não espera por imagens ou scripts. Essa é a grande diferença entre$(document).ready
e$(document).load
Apenas o código que acessa o DOM deve estar no manipulador pronto. Se for um plugin, não deveria estar no evento pronto.
fonte
$(document).ready
. Veja istohead
e você está scripts após os elementos sendo manipulados,document.ready
não é necessário. As imagens são um caso especial, porém ...jQuery
código no manipulador pronto. Apenas o código que acessa o DOM. Se é um plugin, não deveria estar noready
eventoRespostas:
Não, nem sempre. Se você carregar seu JS no cabeçalho do documento, será necessário. Se você estiver criando os elementos após o carregamento da página via AJAX, você precisará. Você não precisará se o script estiver abaixo do elemento html, você também está adicionando um manipulador.
Depende. Levará a mesma quantidade de tempo para anexar os manipuladores, só depende se você deseja que isso aconteça imediatamente quando a página estiver carregando ou se deseja esperar até que todo o documento seja carregado. Portanto, vai depender de outras coisas que você está fazendo na página.
É essencialmente sua própria função, portanto, só pode acessar vars declarados em um escopo global (fora / acima de todas as funções) ou com
window.myvarname = '';
fonte
Antes de usar o jQuery com segurança, você precisa garantir que a página esteja em um estado em que esteja pronta para ser manipulada. Com jQuery, fazemos isso colocando nosso código em uma função e, em seguida, passando essa função para
$(document).ready()
. A função que passamos pode ser apenas uma função anônima .Isso executará a função que passamos para .ready () assim que o documento estiver pronto. O que está acontecendo aqui? Estamos usando $ (document) para criar um objeto jQuery a partir do documento de nossa página e, em seguida, chamando a função .ready () nesse objeto, passando a função que queremos executar.
Já que isso é algo que você fará muito, há um método abreviado para isso, se preferir - a função $ () tem uma função dupla como um apelido para $ (document) .ready () se você passar uma função para ela:
Esta é uma boa leitura: Jquery Fundamentals
fonte
(function($){ })(jQuery);
que envolve seu código para que $ seja jQuery dentro desse encerramento.ready () - especifica uma função a ser executada quando o DOM está totalmente carregado.
Aqui está uma lista de todos os métodos jQuery
Leia sobre a introdução de $ (document) .ready ()
fonte
Para ser realista,
document.ready
não é necessário para nada além de manipular o DOM com precisão e nem sempre é necessário ou é a melhor opção. O que quero dizer é que quando você desenvolve um grande plugin jQuery, por exemplo, você dificilmente o usa em todo o código porque está tentando mantê-lo DRY, então você abstrai o máximo possível em métodos que manipulam o DOM, mas devem ser chamados mais tarde. Quando todo o seu código está totalmente integrado, o único método expostodocument.ready
é geralmenteinit
onde toda a mágica do DOM acontece. espero que isso responda sua pergunta.fonte
Você deve vincular todas as ações em document.ready, porque você deve esperar até que o documento esteja totalmente carregado.
Porém, você deve criar funções para todas as ações e chamá-las de dentro do document.ready. Ao criar funções (seus objetos globais), chame-os sempre que quiser. Assim, uma vez que seus novos dados sejam carregados e novos elementos criados, chame essas funções novamente.
Essas funções são aquelas em que você vinculou os eventos e itens de ação.
fonte
Anexei um link para um div e queria fazer algumas tarefas no clique. Eu adicionei o código abaixo do elemento anexado no DOM, mas não funcionou. Aqui está o código:
Não funcionou. Então coloquei o código jQuery dentro de $ (document) .ready e funcionou perfeitamente. Aqui está.
fonte
O evento pronto ocorre quando o DOM (modelo de objeto de documento) é carregado.
Como esse evento ocorre depois que o documento está pronto, é um bom lugar para todos os outros eventos e funções jQuery. Como no exemplo acima.
O método ready () especifica o que acontece quando ocorre um evento pronto.
Dica: O método ready () não deve ser usado junto com.
fonte