【问题标题】:Why .attr('value') of hidden input element not returning original value from html string?为什么隐藏输入元素的 .attr('value') 没有从 html 字符串返回原始值?
【发布时间】:2015-09-01 18:41:00
【问题描述】:

基本上当在文本框上调用.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

如果我们使用.val() 为该元素设置值,则会忽略 value 属性。任何人都知道为什么会这样?包含此行为详细信息的相关链接会更有帮助。

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

Hidden 输入不是用户可编辑,因此您可能会发现默认值和当前值 对他们来说是一样的。所以.val().attr('value') 对于hiddenelement 是一样的

据我所知,value 属性描述了元素的 默认值,而不是 当前值 。当前值是您可以通过 value 属性访问的值(这是 jQuery val() 所做的)。

【讨论】:

  • 这可以从语义上考虑,但从语法上看,.attr() 将根据文档返回标记中设置的值。
  • @RajaprabhuAravindasamy 没错,但是当您使用带有隐藏字段的.val() 时,它会更改属性value 的值,因此.val().attr() 会产生相同的输出
  • @RajaprabhuAravindasamy:是的,在隐藏输入上更改 .value 确实会改变 DOM 中的 value 属性。
  • 是的,输入类型提交也是如此,看来:w3.org/MarkUp/html-spec/html-spec_8.html#SEC8.1.2.7
  • @BrettCaswell 这是一个有趣的链接。是的,答案似乎就在那里。
猜你喜欢
  • 2015-11-29
  • 2021-08-26
  • 1970-01-01
  • 2021-02-24
  • 2019-11-03
  • 2012-11-15
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多