2009-10-28 18 views
7

Sto tentando di ripristinare l'attributo del valore attuale di un input in modo che possa essere reimpostato su tale valore se ripristinato, non necessariamente il valore originale quando il modulo è stato caricato. Il problema è che questi cambiamenti non sembrano avere effetto. Ho provato sia:Impostare l'attributo del valore attuale di un input con jQuery

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

nonché ....

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

Nessuno di questi realmente cambiare l'attributo value="" dell'ingresso, che è quello che viene utilizzato quando un modulo viene azzerato. Il problema è che se qualcuno salva un modulo (tramite AJAX), poi lo modifica di nuovo e preme reset (senza salvare questa volta), tornerà ai valori originali caricati dalla pagina, NON i valori salvati con, che è quello che sto cercando di ottenere. So che ci sono modi per aggirare questo (memorizzare in variabili locali o qualcosa del genere), ma una soluzione jQuery sarebbe molto meglio. Qualche idea??

risposta

4

quando si sta facendo qualcosa di simile:

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

davvero traduce come:.

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

Quindi, in sostanza, il suo solo mettendo lo stesso valore nel

Quello che vorrà fare è sul carico del documento o la richiesta AJAX, memorizzare il valore in una variabile e quindi recuperarlo quando il modulo viene ripristinato.

0

Basta usare thing.value="foo"; Controlla se funziona quando la cosa è un oggetto jQuery e solo un normale oggetto DOM. utilizzando attr('value', $(this).val()) non funziona come si desidera per

1

mi è venuta in mente una soluzione per questo ...

Quando si salva un modulo (tramite la tecnologia AJAX, il callback successo):

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

Quando la necessità di ripristinare la 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();  
} 

Questa grande opera per caselle di testo, e con un piccolo ritocco si poteva farlo funzionare con qualsiasi tipo di ingresso. Ho molti input quindi volevo evitare di memorizzarli/resettarli manualmente, se possibile. Questo sarebbe un buon plugin ... forse domani

+0

Questo ha funzionato grande per me, grazie! Sto impostando il valore salvato su .keyup() del campo di testo. Poi, quando eseguo il jaw il campo di testo, viene passato al valore più recente, che è ancora salvato in savedValue, e quindi sono in grado di resettare i campi con i loro valori precedenti con questo simpatico script in caso di successo - $ ('# input myForm ') .each (function() { \t $ (this) .val ($ (this) .attr (' savedValue ')); }); Molte grazie! –

0

Ancora meglio di una variabile locale, è possibile utilizzare i metodi jQuery Data per memorizzare i valori di reset insieme all'elemento da ripristinare.

Quando si salva:

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

On Reset:

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

Modifica dei selettori in modo appropriato, e, probabilmente, aggiungendo il controllo non definita come detto Ryan.

2

Sembra un bel trucco, eccone un altro.

È possibile modificare il DOM, sostituendo l'intero elemento, così invece di:

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

è possibile utilizzare:

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

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

Problemi correlati