2009-10-28 5 views
7

Próbuję zresetować atrybut wartości rzeczywistej danych wejściowych, aby można go było przywrócić z powrotem do tej wartości, jeśli nie jest to pierwotna wartość po załadowaniu formularza. Problem polega na tym, że te zmiany nie przynoszą efektu. Próbowałem zarówno:Ustaw atrybut wartości rzeczywistej danych wejściowych za pomocą jQuery

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

jak ....

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

Żadna z nich faktycznie zmienić atrybut wejścia, do czego jest używany, gdy formularz jest resetowany value="". Problem polega na tym, że jeśli ktoś zapisuje formularz (przez AJAX), a następnie edytuje go i naciśnie przycisk reset (w tym czasie oszczędza), powróci do pierwotnych wartości załadowanej strony, a NIE wartości ostatnio zapisanych, właśnie to próbuję zdobyć. Wiem, że są na to różne sposoby (przechowuj w zmiennych lokalnych lub coś w tym stylu), ale rozwiązanie jQuery byłoby znacznie lepsze. Jakieś pomysły??

Odpowiedz

4

kiedy robisz coś takiego:

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

naprawdę tłumaczy się jako:.

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

Tak w istocie, jej po prostu umieszczając taką samą wartość z powrotem w

Co ty będzie chciał wykonać ładunek dokumentu lub żądanie AJAX, zapisać wartość w zmiennej, a następnie pobrać ją po zresetowaniu formularza.

0

Po prostu użyj thing.value="foo"; Sprawdź, czy działa, gdy rzecz jest obiektem jQuery, a także zwykłym obiektem DOM. stosując attr('value', $(this).val()) nie będzie działać jak chcesz go

1

mam wymyślić rozwiązanie tego ...

Podczas zapisywania formularza (poprzez AJAX na zwrotnego sukces):

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

Kiedy konieczności zresetowania postać:

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

działa to wielkie dla pól tekstowych, a przy odrobinie szczypanie można zmusić go do pracy z każdym typem wejściowego. Mam wiele wejść, więc chciałem uniknąć ręcznego przechowywania/resetowania ich, jeśli to w ogóle możliwe. To byłaby dobra wtyczka ... może jutro

+0

Ten pracował wielki dla mnie, dzięki! Ustawiam savedValue na .keyup() w polu tekstowym. Następnie, gdy ajax pole tekstowe, ciągnie przez najnowszą wartość, która jest nadal zapisana w savedValue, a następnie jestem w stanie zresetować pola z ich poprzednich wartości z tym miłym małym skryptem na sukces - $ (wejście # myForm ') .each (function() { \t $ (this) .val ($ (this) .attr (' savedValue ')); }); Wielkie dzięki! –

0

Nawet lepiej niż zmienna lokalna, można użyć metod danych jQuery do przechowywania wartości resetowania wraz z elementem do zresetowania.

Podczas zapisywania:

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

Na resetu:

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

Zmiana selektorów odpowiednio i pewnie dodanie niezdefiniowanej czek jak wspomniano Ryan.

2

To brzmi jak fajna sztuczka, oto kolejna.

Można modyfikować DOM poprzez zastąpienie całego elementu, więc zamiast:

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

można użyć:

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

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