Почему .attr('значение') скрытого элемента ввода не возвращает исходное значение из строки html?

В основном при вызове .attr("value") над текстовым полем оно вернет свое значение, которое было установлено в разметке, а не значение, которое было установлено с помощью .val().

Например,

<input id="test" type="text" value="testing" />

Js:

$("#test").val("hello");
console.log($("#test").val()); //hello
console.log($("#test").attr('value')); //testing

Но, делая то же самое над скрытым элементом, результат был другим, как показано ниже,

HTML:

<input id="test1" type="hidden" value="testing" />

Js:

$("#test1").val("hello");
console.log($("#test1").val()); //hello
console.log($("#test1").attr('value')); //hello

DEMO

Атрибут value проигнорирован, если мы установили значение для этого элемента с помощью .val(). У кого-нибудь есть идея, почему это происходит? Соответствующая ссылка, которая содержит подробности для этого поведения, будет более полезна.

Ответы

Ответ 1

Входы

Hidden не редактируются пользователем, поэтому вы можете обнаружить, что значения по умолчанию и текущие значения для них одинаковы. Таким образом, .val() и .attr('value') одинаковы для элемента Hidden

Насколько мне известно, атрибут value описывает значение по умолчанию для элемента, а не текущее значение. Текущее значение - это то, к чему вы можете получить доступ через свойство value (это то, что делает jQuery val()).