Pregunta

Estoy tratando de restablecer el atributo de valor real de una entrada para que pueda restablecerse a ese valor si se restablece, no necesariamente el valor original cuando se cargó el formulario. El problema es que estos cambios no parecen surtir efecto. He intentado ambos:

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

así como ...

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

Ninguno de estos realmente cambia el atributo value = " " de la entrada, que es lo que se usa cuando se restablece un formulario. El problema es que si alguien guarda un formulario (a través de AJAX), lo vuelve a editar y presiona restablecer (sin guardar este tiempo), volverá a los valores originales con los que se cargó la página, NO a los valores guardados por última vez, que es lo que intento obtener Sé que hay formas de evitar esto (almacenar en variables locales o algo así), pero una solución jQuery sería mucho mejor. ¿Alguna idea?

¿Fue útil?

Solución

cuando estás haciendo algo como esto:

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

realmente se traduce como:

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

Entonces, en esencia, es simplemente volver a poner el mismo valor.

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

Otros consejos

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

Puede modificar el DOM reemplazando todo el elemento, así que en lugar de:

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

puedes usar:

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

He encontrado una solución para esto ...

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

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

Cuando necesite 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 cuadros de texto, y con un pequeño ajuste puede hacer 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 ... tal vez mañana

Simplemente use thing.value = " foo " ;; Verifique si funciona cuando la cosa es un objeto jQuery, así como solo un objeto DOM normal. El uso de attr ('value', $ (this) .val ()) no funcionará de la manera que desea

Incluso mejor que una variable local, podría usar los métodos de datos jQuery para almacenar los valores de restablecimiento junto con el elemento a restablecer.

Al guardar:

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

Al reiniciar:

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

Cambiando los selectores apropiadamente, y probablemente agregando la verificación indefinida como mencionó Ryan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top