2009-10-28 711 views
7

Estoy intentando restablecer el atributo de valor real de una entrada para que se pueda restablecer a ese valor si se restablece, no necesariamente el valor original cuando se cargó el formulario. El problema es que estos cambios no parecen tener efecto. He intentado tanto:Establezca el atributo de valor real de una entrada con jQuery

$(this).attr('value', $(this).val()); 

, así como ....

$(this).val($(this).val()); 

Ninguno de estos en realidad cambiar el atributo value="" de la entrada, que es lo que se utiliza cuando una forma se restablece. El problema es que si alguien guarda un formulario (a través de AJAX), luego lo edita y presiona restablecer (sin guardar esta vez), volverá a los valores originales que cargó la página, NO los valores con los que se guardó por última vez, que es lo que trato de conseguir Sé que hay formas de evitar esto (almacenar en variables locales o algo así), pero una solución jQuery sería mucho mejor. ¿¿Algunas ideas??

Respuesta

4

cuando estás haciendo algo como esto:

$(this).val($(this).val()); 

que realmente se traduce como:.

var temp = $(this).val()); 
$(this).val(temp); 

Así que en esencia, es sólo poner el mismo valor de vuelta en

Lo que querrá hacer es en la carga del documento o la solicitud AJAX, almacenar el valor en una variable y luego recuperarlo cuando se restablece el formulario.

0

Simplemente use thing.value="foo"; Compruebe si funciona cuando cosa es un objeto jQuery, así como solo un objeto DOM normal. utilizando attr('value', $(this).val()) no funcionará cómo quiere que a

1

he llegado a una solución para esto ...

Al guardar un formulario (a través de AJAX, en la devolución de llamada de éxito):

// Set 'savedValue' attr on elements (for when reset, will reset to last saved values) 
$('#myForm input').each(function() { 
    $(this).attr('savedValue', $(this).val()); 
}); 

cuando es necesario restablecer el formulario:

// Reset form 
if($('#myForm input:first').attr('savedValue')!=undefined) { 
    // Have saved values, reset to last saved values 
    $('#myForm input').each(function() { 
     $(this).val($(this).attr('savedValue')); 
    }); 
} 
else { 
    // No saved values, reset form 
    $('#myForm')[0].reset();  
} 

Esto funciona muy bien para los cuadros de texto, y con un poco de ajuste que podría conseguir que funcione con cualquier tipo de entrada. Tengo muchas entradas, así que quería evitar almacenarlas/restablecerlas manualmente si es posible. Este sería un buen complemento ... quizás mañana

+0

Esto funcionó muy bien para mí, gracias! Estoy configurando savedValue en .keyup() del campo de texto. Luego, cuando ajax el campo de texto, extrae el valor más reciente, que aún se guarda en savedValue, y luego puedo restablecer los campos con sus valores anteriores con este pequeño y agradable script en success - $ ('# myForm input ') .each (function() { \t $ (this) .val ($ (this) .attr (' savedValue ')); }); ¡Muchas gracias! –

0

Incluso mejor que una variable local, puede usar los métodos jQuery Data para almacenar los valores de restablecimiento junto con el elemento que se va a restablecer.

Al guardar:

$(this).data("ResetValue", $(this).val()); 

El reinicio:

$(this).val($(this).data("ResetValue")); 

Cambio de los selectores de manera apropiada, y, probablemente, añadiendo el cheque no definido como Ryan mencionó.

2

Eso suena como un truco genial, aquí hay otro.

Puede modificar el DOM mediante la sustitución de todo el elemento, por lo que en lugar de:

$('#my_input').val("new_value_here"); 

que puede utilizar:

$('#my_input').replaceWith(' < input type="text" value="new_value_here" />'); 
+0

o '$ ('# my_input'). ReplaceWith ('');' –

Cuestiones relacionadas