JQuery: получить исходное значение ввода
Можно ли получить начальное значение поля ввода формы?
Например:
<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"
Однако, если пользователь затем изменил содержимое поля ввода #one
на два, html все равно будет выглядеть одинаково (с одним значением), но вызовы JQuery выше вернут два.
JSFiddle, чтобы играть с: http://jsfiddle.net/WRKHk/
Я думаю, что это все равно возможно получить оригинальную ценность, поскольку мы можем вызвать document.forms["formId"].reset()
в reset форму в ее исходное состояние.
Ответы
Ответ 1
Элемент DOM имеет атрибут "значение", к которому вы можете получить доступ:
element.getAttribute('value');
... который может отличаться от свойства элемента value
.
Демо
Обратите внимание, что вы можете вызвать .setAttribute('value', 'new value')
, который фактически повлияет на любой вызываемый form.reset()
.
Ответ 2
Попробуйте следующее:
$("#one")[0].defaultValue;
Ответ 3
Входной элемент получил свойство с именем defaultValue
, которое хранит исходное значение.
Чтобы добраться до него через jQuery, просто используйте .prop()
:
var value = $(this).prop("defaultValue");
Обновлен jsFiddle - после перехода на "два" выше будет возвращено "одно".
Ответ 4
HTML действительно меняется. Просто, что инструмент поиска по умолчанию для браузера по умолчанию всегда показывает исходный источник, полученный с сервера. Если вы используете что-то вроде Firebug, вы сможете увидеть динамические изменения в HTML.
Одним из способов получения начального значения является сохранение его в дополнительном атрибуте в дополнение к "значению". Например, если вы используете свой HTML-код, например:
<input type="text" name="one" value="one" origvalue="one" id="one" />
Вы всегда можете вернуть исходное значение, вызвав:
$("#one").attr("origvalue");
Ответ 5
Save the original_values @ document.ready.
$(function(){
var original_values = $.map($('form input'), function(input){ return $(input).val() });
})
Ответ 6
Вы можете попробовать сохранить значение в данных. Например:
$('#one').data('val',$('#one').val());
И тогда вы можете легко получить его позже следующим образом:
console.log($('#one').data('val'));
Ответ 7
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 );
});