Почему функция jQuery val() не обновляет атрибут "значение"?

Я столкнулся с этой проблемой после того, как я закончил веб-сайт, так как мне пришлось реализовать историю на странице, основанной на ajax (которая требует обновления определенных мест с помощью html (который включает в себя формы с простыми текстовыми входами). что там, где проблема - , они не получают свои значения, потому что они имеют свои значения, установленные val(), а не attr() - ложь)). Я обречен на замену всего javascript из

$('#xxx').val('someValue');

к

$('#xxx').attr('value', 'someValue');

или есть какая-то надежда обходить это?

Вот довольно тривиальный пример здесь. Как вы можете видеть в диалоговом окне, атрибут значение не указан в html-коде.

Ответ 1

Он использует базовый native element.value = 'someValue', который, конечно, устанавливает значение свойства элемента

element.property_to_set = 'new_value';

поэтому он не изменяет атрибут, который будет

element.setAttribute('value', 'someValue')

что делает attr() внутренне, а prop() изменяет свойство, точно так же, как val().
Причина, по которой он изменяет свойство, заключается в том, что свойство является тем, что используется в форме submit, и обычно это используется для получения значения обратно в javascript, поэтому имеет смысл придерживаться свойства, а не атрибута, поскольку атрибут обычно используется только для установки начального значения свойства, а изменение атрибута позже с помощью javascript не обновляет свойство, что будет противоположной проблемой того, что у вас есть, и это повлияет на все формы и быть серьезной проблемой.