2011-07-28 12 views
19

Supongamos que deseo ejecutar algún código una vez que jQuery Mobile haya terminado de procesar la UI. El evento mobileinit no funciona, ya que se produce antes de esto sucede. Una búsqueda rápida en Google parece indicar que simplemente usar $(document).ready no funcionará con JQM; pero lo intenté (llamado después de mobileinit) y funcionó para mí: mi código se ejecutó y elementos actualizados dinámicamente, etc. bien. Así que me pregunto, ¿hay alguna razón por la que no debería ser usándola (no es confiable o causa problemas con JQM), o la información de que se trata no funciona simplemente como incorrecta? ¿Qué me estoy perdiendo?

Actualización: Vea here para una demostración.

+1

ha comprobado http://stackoverflow.com/questions/5622581/jquery-mobile-document-ready-equivalent? –

+0

@George: Sí, y según esa pregunta '$ (document) .ready' * does not * work. Pero extrañamente, para mí, lo hace. Así que supongo que estoy tratando de averiguar si funciona ahora o si hay algunos problemas extraños al tratar con JQM que debería conocer. –

Respuesta

12

Lo más probable es que la razón por la que lees que $ (document) .ready no funcione con jQuery Mobile es que no se activa cada vez que ves una pseudopágina. Dicho esto, todavía se desencadena como debería cuando se carga el documento html.

Si desea ejecutar código que activa cada vez que vea una página seudo puede utilizar este código:

$('[data-role="page"]').live('pageshow', function() { 
    //run your code here 
}); 

NOTA: hay otros ganchos que se pueden unir a también (pageshow, pagehide , pagebefoershow, pagebeforehide), la documentación se puede encontrar aquí: http://jquerymobile.com/demos/1.0b1/docs/api/events.html

---------- ---------- EDITAR

estaba pensando en esto y el mejor análogo para $ (document) .ready() no es vinculante para el evento "pageshow", sería vinculante para el evento "pagecreate". $ (document) .ready() se dispara una vez por carga de página, y "pagecreate" hace lo mismo para las pseudopáginas, mientras que "pageshow" se dispara cada vez que se muestra una página.

De modo que si un usuario hacía clic fuera de la pantalla de inicio y luego hacía clic en un botón Atrás para regresar a la pantalla de inicio, el "pageshow" se activaría en este segundo (y posterior) "inicio" de la pantalla de inicio.

Además, "pageshow" requiere que el usuario navegue a la página a la que está vinculado.

+0

Ah, ya veo; entonces, ¿la idea de que "no funciona" siempre se basó en un malentendido? Es gracioso; Vi estos enfoques alternativos y pensé que eran * menos que ideales * porque hacían que un evento se disparara antes de que se mostrara cada pseudopagina en lugar de solo una vez para todo el documento (es decir, el sitio móvil de jQuery). Mientras que el último es precisamente lo que quiero. –

+0

@jasper te estás enlazando a los eventos api de la versión alfa, es mejor usar la versión beta –

+0

buen catch, tiempo para actualizar mi carpeta de favoritos ... – Jasper

Cuestiones relacionadas