2011-03-09 15 views
6

Agradecería algunos comentarios sobre el uso de $ (this) [0] .defaultValue para determinar si un valor de cuadro de texto ha cambiado desde el valor original, por ejemplo

//keyUp event 

if($(this)[0].defaultValue != $(this).val()) 
{ 
    //Field has been modified mark as dirty 
} 

En Chrome parece para generar la salida deseada en el sentido de que la defaultValue es siempre el valor original de la caja de texto se cargó en el DOM con. Sin embargo, recientemente descubrí este valor después de rastrear objetos DOM en las herramientas de desarrollo de Chrome en busca de algo completamente diferente y me preocupa que pueda llegar con un montón de problemas. Además Google no giró mucho lo que me preocupa aún más ...

Cualquier comentario muy apreciado.

Saludos Rob

Respuesta

7

Parece bastante seguro. Acabo de utilizar este violín: http://jsfiddle.net/rXsrQ/ y lo probé en Chrome/Firefox 3.6/safari 4/ie8, todos se comportan igual.

Se describe aquí: https://developer.mozilla.org/en/DOM/HTMLTextAreaElement y no hay ningún aviso sobre problemas de compatibilidad.

También se describe aquí: http://msdn.microsoft.com/en-us/library/ms533718(v=vs.85).aspx y parece ser compatible con, por ejemplo, 5 y hasta, por lo que no parece por qué no debería ser seguro de usar.

+1

gracias por la respuesta que voy a dar mi voto a usted porque su respuesta fue atacado de manera más directa a la pregunta original. @jAndy - Yo marcaría el tuyo también si pudiera porque tu respuesta ofrece una excelente alternativa. – Rob

3

.defaultValue no es estándar y, por lo tanto, no se menciona en ninguno W3C borrador/especificaciones. Si está a cargo del marcado de HTML que se está representando, los atributos HTML5data- parecen ser una forma muy conveniente de obtener el comportamiento deseado entre navegadores.

Por lo que podría hacerla como

<input type="text" value="foo" data-default="foo" /> 

jQuery va a agarrar esos atributos data- y almacenar la parte detrás de - como clave en sus datos ampliar objeto para ese nodo específico. Eso significa que sólo puede acceder a esos valores llamando

$('input').data('default') // === 'foo' 

Ejemplo: http://jsfiddle.net/zAuPf/

+0

Me gustan las dos respuestas, perdone mi ignorancia, pero ¿esto funcionará aún en un navegador que no sea compatible con Html5? Supongo que sí porque para jQuery es solo otro atributo. Estoy ansioso por entrar en HTML5, pero tengo que contenerme y terminar mi proyecto actual antes de comenzar a "jugar". Además, la sección de mi sitio para la que necesito esta solución está escondida de los motores de búsqueda, por lo que no me preocupa el cumplimiento de w3c en relación con posibles sanciones de SEO que todavía parecen estar un poco en el aire en relación con el transición a HTML5. Así que esta podría ser una alternativa robusta – Rob

+0

@DrRob: sí, esto también funcionará con navegadores que no sean HTML5. – jAndy

+0

gracias de nuevo. De hecho fui con usted una alternativa y está funcionando muy bien. Decidí que también quería usar $ (this) [0] .defaultValue en las casillas de verificación y en pocas palabras, no parecía funcionar. Seguí recibiendo "verdadero" como el valor predeterminado, independientemente de su estado original. – Rob

Cuestiones relacionadas