javascript - 为什么 innerHTML 不反射(reflect)在 html 表单中所做的更改?

标签 javascript html cross-browser

这是我的 html 文件的一部分:

<form id="foo">
   <select>
      <option value="1" selected>1</option>
      <option value="2">2</option>
   </select>
</form>

现在,当我使用以下 javascript 代码时,它会为我提供表单的确切内容:

alert(getElementById("foo").innerHTML);

但是,在我更改了表单的选项后,上面的代码仍然返回以前版本的表单内容。

例如,假设我已将选项从“1”切换为“2”。在这种情况下,我希望上面的 javascript 代码返回表单的内容,并选择了选项“2”;但无论我如何更改表单,它始终会返回表单内容的原始版本。

最佳答案

内容属性显示初始状态。

IDL 属性(又名属性)显示当前状态。

例如,假设我们有这样的文本输入:

<input value="foo" />

它的默认文本是“foo”。让我们把它改成“酒吧”。然后,

  • input.getAttribute('value') 将是初始值:"foo"
  • input.defaultValue 将等同于上面的内容:"foo"
  • input.value 将是当前值:"bar

var inp = document.querySelector('input');
(inp.oninput = function() {
  document.getElementById('attr').textContent = inp.getAttribute('value');
  document.getElementById('defVal').textContent = inp.defaultValue;
  document.getElementById('val').textContent = inp.value;
})();
<input value="foo" />
<p>Attribute: <span id="attr"></span></p>
<p>Default value: <span id="defVal"></span></p>
<p>Value: <span id="val"></span></p>

在你的情况下,它发生了类似的事情。 innerHTML 仅显示 HTML 标记,其中包括内容属性(反射(reflect)初始状态)但不包括 IDL 属性(当前状态)。

如果您想要当前状态,请使用 IDL 属性读取它,而不是使用 innerHTML

关于javascript - 为什么 innerHTML 不反射(reflect)在 html 表单中所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30549714/

相关文章:

javascript - 尝试创建一个在更改时自动提交并重新加载页面的表单

javascript - 绝对元素在相对元素悬停和点击问题的顶部

javascript - 如何使用 html5 数据属性在 html 元素中存储 javascript 对象或 JSON?

html - 当主 <div> 包装器中有第二个 <div> 时,自动调整 <div> 图像的大小

jquery - 绝对定位的 div 及其内容

javascript - 将 SSRS 报告集成到网络中 - Chrome 等效项 - Opera/FF/IE 的 JavaScript hack?

javascript - 使用ajax检索json数据的所有 'data'属性

javascript - slider 覆盖 slider 后的内容。为什么?

CSS 使底部容器高度为可见空间的 100%

css - IE9文字阴影-过滤: glow,色度和阴影