2011-12-13 14 views
20

Czy można uzyskać wartość początkową pola wprowadzania formularza?JQuery: Uzyskaj oryginalną wartość wejściową

Na przykład:

<form action="" id="formId"> 
    <input type="text" name="one" value="one" id="one" /> 
</form> 

$("#one").attr("value"); //would output "one" 
$("#one").val();   //would output "one" 
$("#one").get(0).value; //would output "one" 

Jednakże, jeśli użytkownik następnie zmienił treść wejściowego pola #one do dwóch, html nadal wyglądają tak samo (z jedną jako wartość), ale JQuery połączenia powyżej zwrócą dwa.

JSFiddle grać z: http://jsfiddle.net/WRKHk/

Myślę, że to musi być jeszcze możliwe, aby uzyskać wartość oryginalna, ponieważ jesteśmy w stanie wywołać document.forms["formId"].reset() zresetować formularz do stanu pierwotnego.

+2

'$ (this).get (0) 'jest śmiesznym sposobem pisania' tego '... ty * naprawdę * nie musisz używać jQuery tutaj': P' –

Odpowiedz

13

Element DOM ma "wartość" atrybutu, który można uzyskać dostęp poprzez:

element.getAttribute('value'); 

... który może być różny od elementu własnościvalue.

Demo

Zauważ, że możesz zadzwonić .setAttribute('value', 'new value') które będą faktycznie narusza form.reset() która jest wywoływana po.

+0

Doskonale - dziękuję, właśnie to miałem na myśli! –

+1

@ David Ale dlaczego '$ (this) .attr ('value')' zwraca to samo co 'this.getAttribute ('value')'? Myślę, że powinno ... –

+0

@RightSaidFred Masz na myśli, że to błąd? Trudno mi w to uwierzyć. Metoda 'attr()' istnieje od dawna. Wszystkie błędy powinny już zostać usunięte. Musi istnieć ważny powód, dla którego funkcja 'attr()' nie jest w pełni odwzorowana na 'getAttribute()' ... –

2

Kod HTML się zmienia. Wystarczy, że domyślne narzędzie wyświetlania widoku przeglądarki zawsze pokazuje oryginalne źródło pobrane z serwera. Jeśli użyjesz czegoś takiego jak Firebug, zobaczysz dynamiczne zmiany w HTML.

Jednym ze sposobów uzyskania wartości początkowej jest zapisanie jej w dodatkowym atrybucie oprócz "wartości". Na przykład, jeśli służyć swój HTML jak:

<input type="text" name="one" value="one" origvalue="one" id="one" /> 

zawsze można wrócić do pierwotnej wartości przez wywołanie:

$("#one").attr("origvalue"); 
+0

+1 - kreatywne rozwiązanie, ale odpowiedź @ Davida Hedlunda była tą, której szukałem! –

0
Save the original_values @ document.ready. 

$(function(){ 
    var original_values = $.map($('form input'), function(input){ return $(input).val() }); 
}) 
0

można spróbować przechowywania wartości w danych. Na przykład:

$('#one').data('val',$('#one').val()); 

A potem można łatwo pobrać go później tak:

console.log($('#one').data('val')); 
0
var initialVal = $('#one').val(); 
alert(initialVal); 
$('#one').live("focusout", function() { 
    var attribute = $("#one").attr("value"); 
    var value = $(this).val(); 
    var get = $(this).get(0).value; 
    alert("Attribute: " + attribute + "\n\nValue: " + value + "\n\ninit val: " + initialVal +"\n\nGet: " + get); 
}); 
8

elementem wejściowym został właściwość o nazwie defaultValue że jest przechowywanie oryginalna wartość.

Aby go osiągnąć poprzez jQuery, wystarczy użyć .prop():

var value = $(this).prop("defaultValue"); 

Updated jsFiddle - po zmianie na "dwa", powyższe powróci "jeden".

+1

Lub po prostu 'this.defaultValue' ... – Brilliand

Powiązane problemy