2011-12-13 18 views
20

¿Es posible obtener el valor inicial de un campo de entrada de formulario?JQuery: Obtenga el valor de entrada original

Por ejemplo:

<form action="" id="formId"> 
    <input type="text" name="one" value="one" id="one" /> 
</form> 

$("#one").attr("value"); //would output "one" 
$("#one").val();   //would output "one" 
$("#one").get(0).value; //would output "one" 

Sin embargo, si el usuario entonces cambia el contenido del campo de entrada #one a dos, el html seguiría siendo el mismo aspecto (con uno como el valor), pero la JQuery las llamadas anteriores devolverían dos.

jsFiddle para jugar con: http://jsfiddle.net/WRKHk/

creo que esto debe ser posible para obtener el valor original, ya que somos capaces de llamar document.forms["formId"].reset() a restablecer el formulario a su estado original.

+2

'$ (this).get (0) 'es una forma ridícula de escribir' this' ... you * really * no tiene que usar jQuery aquí ': P' –

Respuesta

13

El elemento DOM tiene el atributo "value" que se puede acceder por:

element.getAttribute('value'); 

... que puede ser diferente de la propiedad del elementovalue.

Demo

Tenga en cuenta que usted puede llamar .setAttribute('value', 'new value') que realmente afectar a cualquier form.reset() que se llama después.

+0

Excelente - ¡gracias, esto es exactamente lo que tenía en mente! –

+1

@David Pero ¿por qué '$ (this) .attr ('value')' no devuelve lo mismo que 'this.getAttribute ('value')'? Creo que debería ... –

+0

@RightSaidFred ¿Quieres decir que es un error? Me parece difícil de creer. El método 'attr()' ha existido por mucho tiempo. Todos los errores ya deberían haber sido eliminados. Debe haber una razón válida por la que 'attr()' no se asigne completamente a 'getAttribute()' ... –

2

El HTML no cambia. Solo que la herramienta fuente de vista predeterminada del navegador siempre muestra la fuente original obtenida del servidor. Si utilizas algo como Firebug, podrás ver los cambios dinámicos en HTML.

Una forma de obtener el valor inicial es almacenarlo en un atributo adicional además de 'valor'. Por ejemplo, si usted sirve a cabo el HTML como:

<input type="text" name="one" value="one" origvalue="one" id="one" /> 

Siempre se puede recuperar el valor original llamando:

$("#one").attr("origvalue"); 
+0

+1 - ¡una solución creativa, pero la respuesta de @David Hedlund es la que estaba buscando! –

0
Save the original_values @ document.ready. 

$(function(){ 
    var original_values = $.map($('form input'), function(input){ return $(input).val() }); 
}) 
0

usted podría intentar almacenar el valor de los datos. Por ejemplo:

$('#one').data('val',$('#one').val()); 

Y entonces usted puede fácilmente recuperarlo más tarde como esto:

console.log($('#one').data('val')); 
0
var initialVal = $('#one').val(); 
alert(initialVal); 
$('#one').live("focusout", function() { 
    var attribute = $("#one").attr("value"); 
    var value = $(this).val(); 
    var get = $(this).get(0).value; 
    alert("Attribute: " + attribute + "\n\nValue: " + value + "\n\ninit val: " + initialVal +"\n\nGet: " + get); 
}); 
8

elemento de Entrada consiguió propiedad llamada defaultValue que está almacenando el valor original.

para llegar a él a través de jQuery, sólo tiene que utilizar .prop():

var value = $(this).prop("defaultValue"); 

Updated jsFiddle - después de cambiar a "dos", el anterior devolverá "uno".

+1

O simplemente 'this.defaultValue' ... – Brilliand

Cuestiones relacionadas