2011-04-22 20 views
10

¿Los resultados finales de los siguientes fragmentos de jQuery son idénticos?jQuery función de documento preparado

Fragmento 1:

$(function() { alert('test!'); }); 

Fragmento 2:

$(document).ready(function() { alert('test!'); }); 

En otras palabras, es simplemente $(function(){}) abreviatura de $(document).ready(function() { });?

La razón por la que estoy preguntando es porque estamos viendo algunos problemas extraños con una pequeña aplicación que hemos creado usando jQuery y jQuery UI. Ocasionalmente, al realizar una acción de envío de formulario al hacer clic en un botón, la ventana del navegador se congelará. Todavía podemos usar la ventana subyacente del navegador (la que abre la ventana emergente) hasta que realicemos algunas acciones allí. Los usuarios solo pueden continuar cerrando el navegador a la fuerza (Internet Explorer, obviamente). Sospechamos que esto está relacionado con el complemento PDF de Acrobat, pero solo estoy verificando todos los ángulos aquí, porque encontré this issue que parece exhibir un comportamiento similar.

+5

Son sí equivalente. Vea este enlace como referencia http://api.jquery.com/ready/ – dmarucco

+1

@dmarucco, esa debería ser una respuesta. –

+0

@dmarucco: si agrega eso como respuesta, lo aprobaré. – tmbrggmn

Respuesta

9

Los tres de las siguientes sintaxis son equivalentes:

$(document).ready(handler) 
$().ready(handler) (this is not recommended) 
$(handler) 

Aliasing el espacio de nombres jQuery

Al utilizar otra biblioteca JavaScript, es posible que se quiere llamar la .noConflict $() para evitar dificultades de espacio de nombres. Cuando se llama a esta función, el atajo $ ya no está disponible, lo que nos obliga a escribir jQuery cada vez que normalmente se escribe $. Sin embargo, el controlador pasado al método .ready() puede tomar un argumento, que se pasa el objeto jQuery global. Esto significa que podemos cambiar el nombre del objeto en el contexto de nuestro manejador ready() sin afectar a otros códigos:

jQuery(document).ready(function($) { 
    // Code using $ as usual goes here. 
}); 
3

$(function(){}) y $(document).ready(function() { }) son idénticos.

3

Sí, esto es idéntico. pero el primero se usa generalmente en jquery para facilitar.

$(function() { 
    alert('test!'); 
}); 
1

El código siguiente también trabaja

$(document).ready(function(){ 
    alert("success"); 
}); 

O

$(function(){ 
    alert("succes"); 
}); 
1

Sí:

$(document).ready(function() { 
    /* code */ 
}); 

... y:

$(function() { 
    /* code */ 
}); 

... son efectivamente lo mismo, y este último se conoce comúnmente como taquigrafía para el primero.

Si usted se pregunta por qué que producen el mismo resultado, esto tiene que ver con el constructor jQuery -la función jQuery(), alias, tal como $() - y sus entradas permitidas.

El constructor está documentado en api.jquery.com/jquery/, y sus dos opciones relevantes se describen a continuación.


jQuery(selector [, context ])

acepta una cadena que contiene un selector CSS que luego se utiliza para que coincida con un conjunto de elementos.

Devuelve un objeto jQuery.

Esta opción anterior es cómo se está invocando el constructor jQuery al escribir:

$(document).ready(function() { /* code */ }); 

El objeto document se selecciona y se utiliza para construir una jQuery object. Cuando el DOM está completamente cargado, ese objeto jQuery invoca la devolución de llamada (la función anónima) dentro de ready().


jQuery(callback)

se une a una función a ejecutar cuando el DOM ha terminado de cargarse.

Devuelve un objeto jQuery.

Esta opción anterior es cómo se está invocando el constructor jQuery al escribir:

$(function() { /* code */ }); 

La función de devolución de llamada (la función anónima) se utiliza para construir un objeto jQuery, y cuando el DOM es totalmente cargado, se invoca.

Cuestiones relacionadas