2011-08-23 27 views
6

Tengo problemas para configurar el texto de la pantalla de una entrada de texto de jQuery Mobile. Lo que sigue es mi códigoConfiguración del texto del campo de entrada de Jquery Mobile

$('#editPartyName').textinput(); 
$('#editPartyName').val(party.name); 

El comportamiento es muy raro, la primera vez que las pantallas modales, el cuadro de entrada de texto está en un referente (jQuery Mobile plugin de diálogo sencillo), el texto está en el campo de entrada en el modal bien. Sin embargo, la segunda vez que se muestre el modal, el texto visual en la entrada desaparecerá. Sin embargo, cuando compruebo el valor del elemento, alerta ($ ('# editPartyName) .val()); El valor está ahí y es correcto. El texto simplemente no se mostrará en el elemento. Estoy usando JQM Beta 1. También he intentado pegar $ ('# editPartyName'). Textinput() después de la declaración val().

¿Alguien tiene alguna sugerencia? ¡Gracias!

+0

tuve un problema de "publicación de estilo" al establecer programáticamente el valor mediante '.val (" ")' y encontré las llamadas '.focus().blur() 'lo resolvió. – pstanton

Respuesta

3

Para crear el estilo de entrada de texto de jQuery Mobile, utilice .textinput() y para actualizar la vista de una entrada de texto de jQuery Mobile existente, utilice .textinput("refresh"). Por lo tanto, en las siguientes llamadas debe usar el método .textinput("refresh") y en una entrada de texto no inicializada debe usar .textinput().

Algo así como:

$('#editPartyName').val(party.name).textinput('refresh'); 

Mi experiencia es con las entradas de selección, pero yo creo que es la misma para las entradas de texto, esto es lo que hago para selecciona para actualizar la vista:

$("select#foo").selectmenu("refresh"); 

Este ejemplo es de los documentos: http://jquerymobile.com/demos/1.0b1/docs/forms/forms-selects.html (parte inferior de la página)

Actualización

No debería ser necesario hacer otra cosa que no sea cambiar el valor del elemento de entrada:

$('#editPartyName').val(party.name) 

Aquí es una demo usando jQuery Mobile 1.1.0: http://jsfiddle.net/VbAKL/

Y aquí es una demostración usando jQuery Mobile 1.0B1: http://jsfiddle.net/VbAKL/1/

Es muy probable que se cree este problema porque está seleccionando por ID y puede haber varias instancias de una ID en el DOM a la vez. Los sitios de jQuery Mobile pueden tener varias "pseudo-páginas" en el DOM a la vez, y si tiene un elemento en cada página con el ID de #header, cuando intente ejecutar una selección para #header, solo se devolverá la primera instancia. Por lo tanto, su llamada a la función $('...').val(...) puede estar funcionando, pero no en el elemento correcto.

Respuesta corta: asegúrese de que sus identificaciones sean únicas en todas las páginas de su sitio cuando utiliza jQuery Mobile.

+0

Gracias por la publicación Jasper, probé tus sugerencias pero no funciona ... No sé si estás familiarizado con el complemento de diálogo simple pero estoy creando HTML sin formato (que es donde declaro mi campo de entrada) y colocándolo en la pantalla modal. El campo de entrada se muestra correctamente pero tengo el error que mencioné anteriormente. Cuando coloco el código que me diste en ese mismo oyente (el clic que declara html para el modal y lo desencadena) realmente mata toda la ejecución después de $ ('# editPartyName'). Textinput ('refresh'); No estoy seguro de lo que está ocurriendo ... – user906824

+0

La documentación de jQuery Mobile no hace mención de un método .textinput(). Lo intenté de todos modos, y obtuve "no such method 'refresh' para la instancia del widget de textinput" –

+0

@MaffooClock http://jquerymobile.com/demos/1.1.0/docs/forms/textinputs/methods.html. Pruebe ese enlace, describe el método '.textinput()'. El enlace en mi respuesta original es para la primera versión Beta de jQuery Mobile 1.0. – Jasper

12

Me encontré con esto también. Pude establecer el valor de una entrada de texto con $('#some_id').val('foobar'), y luego imprimir el valor en la consola con console.info($('#some_id').val());, pero en el navegador, la entrada de texto estaba vacía.

Después de hurgar en ello un momento, me di cuenta de que $('input[id=some_id]').val('foobar') funcionó como se esperaba. Entonces, aparentemente, hay algún tipo de error raro con jQuery haciendo referencia a un elemento por ID.

+2

Si realiza una referencia mediante una ID, asegúrese de que sea exclusiva para todo el sitio porque las pseudo páginas jQuery Mobile se almacenan en el mismo DOM. Por lo tanto, si intenta seleccionar '# header' en una página, puede estar seleccionando' # header' en otra página (con IDs, se devuelve el primero encontrado y el resto se ignora). – Jasper

+0

En mi caso, no hay ID duplicados. –

+0

Esa es una peculiaridad loca de Jquery. Gracias un montón –

Cuestiones relacionadas