Pergunta

Eu estou tentando redefinir o atributo valor real de uma entrada para que ele possa estar de volta redefinido para que valor se reset, não necessariamente o valor original quando o formulário foi carregado. O problema é que essas alterações não parecem ter efeito. Eu tentei tanto:

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

, bem como ....

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

Nenhum destes realmente mudar o atributo value="" da entrada, que é o que é usado quando um formulário é reposto. O problema é que, se alguém salva um formulário (via AJAX), em seguida, novamente edita-o e prensas reset (w / out salvar desta vez), ele vai voltar para os valores originais da página carregada com, e não os valores última versão guardada com, que é o que eu estou tentando obter. Eu sei que existem maneiras de contornar isso (loja em variáveis ??locais ou algo assim), mas uma solução jQuery seria muito melhor. Quaisquer ideias ??

Foi útil?

Solução

quando você está fazendo algo parecido com isto:

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

que realmente se traduz como:

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

Então, em essência, é apenas colocar o mesmo valor de volta.

O que você vai querer fazer é sobre a carga documento ou a solicitação AJAX, armazenar o valor em uma variável e, em seguida, recuperá-la quando o formulário é reposto.

Outras dicas

Isso soa como um truque legal, aqui é outra.

Você pode modificar o DOM, substituindo todo o elemento, então em vez de:

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

Você pode usar:

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

Eu vim com uma solução para este ...

Ao salvar um formulário (via AJAX, sobre o retorno de chamada de sucesso):

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

Quando a necessidade de redefinir a forma:

// 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();    
}

Isso funciona muito bem para caixas de texto, e com um pouco de ajustes você pode obtê-lo para trabalhar com qualquer tipo de entrada. Eu tenho um monte de entradas, então eu queria evitar o armazenamento manualmente / redefinindo-los se possível. Este seria um bom plug-in ... talvez amanhã

Apenas uso thing.value="foo"; Verifique se ele funciona quando coisa é um objeto jQuery, bem como apenas um objeto DOM regular. usando attr('value', $(this).val()) não vai funcionar como você quer que ele

Ainda melhor do que uma variável local, você pode usar os métodos jQuery de dados para armazenar os valores de reset, juntamente com o elemento a ser reposto.

Ao salvar:

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

Na reinicialização:

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

Alterar os seletores de forma adequada, e, provavelmente, adicionando a verificação indefinido como Ryan mencionado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top