为什么jquery.val()只更改隐藏输入字段的值属性?

为什么jquery.val()只更改隐藏输入字段的值属性?,jquery,html,Jquery,Html,我们使用一些非常简单的jQuery来更改文本字段的值: <input type="text" name="rabatt" id="sonderrabatt" value=""> var sonderrabatt = 10; $('#sonderrabatt').val(sonderrabatt); var sonderrabatt=10; $('sonderrabatt').val(sonderrabatt); 这会更改浏览器中显示的值,但不会更改源代码中文本字段的值属性 现在

我们使用一些非常简单的jQuery来更改文本字段的值:

<input type="text" name="rabatt" id="sonderrabatt" value="">
var sonderrabatt = 10;
$('#sonderrabatt').val(sonderrabatt);

var sonderrabatt=10;
$('sonderrabatt').val(sonderrabatt);
这会更改浏览器中显示的值,但不会更改源代码中文本字段的值属性

现在,考虑一下:

<input type="hidden" name="rabatt" id="sonderrabatt" value="">
var sonderrabatt = 10;
$('#sonderrabatt').val(sonderrabatt);

var sonderrabatt=10;
$('sonderrabatt').val(sonderrabatt);
将输入类型更改为“隐藏”,值属性也会更改

1.这是否意味着我们必须执行以下操作才能更改浏览器中显示的输入字段值及其在源代码中的值属性

<input type="text" name="rabatt" id="sonderrabatt" value="">
var sonderrabatt = 10;
$('#sonderrabatt').val(sonderrabatt);
$('#sonderrabatt').attr('value',sonderrabatt);

var sonderrabatt=10;
$('sonderrabatt').val(sonderrabatt);
$('sonderrabatt').attr('value',sonderrabatt');
2.为什么.val()适用于类型=隐藏而不适用于类型=文本输入字段?

.val()
更改元素属性值,而不是属性值。属性是html在初始渲染时显示的内容,属性包含DOM对象中的实际值,可以多次更改,但在初始渲染后可能不会在html中显示

.val(myValue)
.prop('value',myValue)

在纯JavaScript中

element.value = myValue; // set property on DOM object
element.setAttribute('value', myValue); // set attribute on HTML element
记住

  • DOM元素(HTML)->属性

  • DOM对象(JS)->属性

相关的


为什么要更改
文本
字段的实际
属性?可以使用$('sonderrabatt').attr('value','newvalue');但是为什么要这样做呢?浏览器会跟踪输入的“真实”值,我不确定如果没有值,它是否会返回到value属性。我只在LoadSame页面上使用value属性进行输入值初始化,对于data属性,在doc中您可以发现:'第一次访问数据属性时,数据属性被拉入,然后不再被访问或修改(所有数据值都存储在jQuery内部)”根据jQuery
val()
的文档,它应该工作得非常好。请看这里:您是否在输入html后编写了脚本?