【问题标题】:best practice to set values of select tags设置选择标签值的最佳实践
【发布时间】:2021-03-25 19:46:29
【问题描述】:

例如 - 个人资料页面 - 用户想要更改选择标签中的某些值
你不能说 - <select id='lorem' value='ipsum'>
你必须去 javascript - $('#lorem').val('ipsum')
这是真的吗?
有没有更好的做法 - 如果您有很多选择标签?
顺便说一句 - 为什么 html 开发人员会这样做 - 一定有一些强有力的理由

【问题讨论】:

  • 据我所知,html 的动态变化(无需重新加载页面)必须使用 Javascript 代码完成,这是 javascript 的基本用途。但是,如果您告诉我们有关您最终目的的更多信息,也许我们可以为您带来更好的方式。
  • @MOWebCreation - <input value='ipsum' - 这不是动态更改。最终目的 - 正常设置值,无需 javascript,因为我在页面上有 9 个选择标签
  • 您想在页面/html 生成中预设选择下拉菜单的“选定”值吗?
  • @DaniilLoban - $('#lorem').val('ipsum') - 不行。对于 html 开发人员来说,这是一种耻辱。正常的方法是在 html 中使用 value 属性

标签: javascript html jquery


【解决方案1】:

您的“问题”确实包含多个问题,因此我将答案分为多个部分。

<select><option>

要最初选择<select> 中的<option>,请将selected 属性添加到<option>。选择 <option> 会使 <select> 具有所选选项的值。

var select = document.querySelector('select');
var code = document.querySelector('code');

select.addEventListener('change', () => code.textContent = select.value);
code.textContent = select.value;
body {display:flex;align-items:center;gap:0.5rem}
code {padding:0 0.2rem;background:lightgray}
<select>
  <option value="first">First option</option>
  <option value="second" selected>Second option, initially selected</option>
  <option value="third">Third option</option>
</select>

<span>Select's 'value': <code></code></span>

&lt;select&gt; 一个value-attribute 将被浏览器引擎忽略,因为HTML5 没有指定&lt;select&gt;-tag 有一个value-attribute。
注意: HTML 属性 value 和 JavaScript 属性 .value 不一定相互关联。

请参阅此示例以供参考:

var select = document.querySelector('select');
var code = document.querySelector('span > code');

select.addEventListener('change', evt => {
  code.textContent = evt.target.value;
});
code.textContent = select.value;
body {display:flex;flex-flow:column;align-items:flex-start;gap:0.5rem}
code {padding:0 0.1rem;background:lightgray}
<div>
  <code>&lt;select&gt;</code> has the attribute <code>value="from-select"</code>.
</div>

<select value="from-select">
  <option value="from-opt1">Opt1</option>
  <option value="from-opt2">Opt2</option>
</select>

<span>Select's 'value': <code></code></span>

要动态更改&lt;option&gt;,您必须使用 JavaScript。

var input = document.querySelector('input');
var option = document.querySelector('option');
var code = document.querySelector('code');

// Ignore; update 'pre.textContent' when changing 'value'
option.setAttribute = function(name, value) {
  HTMLElement.prototype.setAttribute.call(this, name, value);
  if (name === 'value') code.textContent = value;
};

// How to change the 'value'-attribute using JS
document.querySelector('button').addEventListener('click', () => {
  option.setAttribute('value', input.value);
  input.value = '';
});
body {display:flex;flex-flow:column;align-items:flex-start;gap:0.5rem}
code {padding:0.1rem 0.2rem;background:lightgray}
<span>
  <input>
  <button>Change value of 'Option'</button>
</span>
<select>
  <option value="initial-value">Option</option>
</select>

<span>Option's value: <code>initial-value</code></span>

关于“为什么 html 开发人员会这样”

释义:为什么 HTML 不能自行更改其标记?

原因是,HTML 最初是为通过 Internet 提供的科学文档创建的。 由于互联网本质上是一个由互连的、可能完全不同的设备组成的网络,因此 HTML 必须尽可能不特定且“与设备无关”,以允许在几乎任何具有显示器的设备上呈现它.

因此,任何其他资源(例如样式表、脚本、图像)对于 HTML 的呈现都应该是可选的,因为 HTML 应该可以“按原样”呈现。
HTML 还应该是向后兼容的,这意味着未来对 HTML 规范的更改不应妨碍 HTML 的服务。这意味着,任何未知的……基本上都会被渲染引擎(今天的浏览器)忽略,因此所有当时存在的功能仍然可以按预期工作。

最初,除了提供静态内容之外,HTML 并没有任何其他功能。然而,在过去的几十年里,互联网经历了技术进步的“热潮”,现在,JavaScript 事实上任何浏览器引擎和网站的一部分,使它们能够拥有先进的功能和互动。

互联网处于不断发展的状态,而且永远如此。忽视互联网的新状态及其规范(例如浏览器引擎等)将意味着一个人没有与时俱进,对自己隐瞒新的、现代的和当前的信息和知识,实质上是把一个人抛在后面。

“传统”在任何技术领域都很难找到,因为新的进步和发现只是其中的一部分。

要了解有关互联网根源的更多信息(即使视频主题是关于 CSS),我建议观看 MDN's video about why CSS is weird (and how HTML came to be)

关于你的“问题”...

正如您在 cmets 中进一步解释的那样:

我有一些关于数据库中每个用户的数据。这些数据来自 报名表格。该表单具有选择标签。现在,用户想要改变 他的个人资料中的一些数据。 Tha数据需要在选择时呈现 标签。使用 value 属性来做到这一点是很正常的,就像在任何 其他输入 - 没有 javascript

你可以通过两种方式做到这一点:

  1. 为每个用户数据创建一个带有一个字段的&lt;form&gt;。有了这个,您还有两个选择:
    1. 准备字段以保存其当前数据。然后,用户可以轻松提交他的更改。
    2. 将字段留空。如果提交后字段为空,则忽略建议的“更改”。
  2. 让用户一次选择要更改的数据。同样,还有两个选项可以实现这一目标:
    1. 获取该字段的当前数据。用户可以对其进行更改,然后再次轻松提交。
    2. 让用户重新输入新数据,然后提交。

以下是选项 2.2 的 HTML 在实现时的外观的简单示例:
注意:我将 &lt;button&gt; 的默认类型从 type="submit" 更改为 type="button"用于演示目的。

var select = document.querySelector('select');
var input = document.querySelector('input');

document.querySelector('button').addEventListener('click', () => {
  console.log(`Would change user-data '${select.value}' to the value '${input.value}'.`);
});
<form>
  <select>
    <option value="name">Name</option>
    <option value="address">Address</option>
    <option value="email">E-Mail</option>
  </select>
  <input>
  <button type="button">Submit</button>
</form>

【讨论】:

  • 感谢您的努力,但是...但是...但是... - &lt;select id='lorem' value='ipsum'&gt; - 开发人员在 html 中进行此操作有什么问题?
  • @qadenza 正如您在上面的示例中看到的那样:给&lt;select&gt; value-attribute 没有任何作用。如果要设置选择应具有的当前值,则必须选择相应的&lt;option&gt;
  • 正如我上面多次解释的那样 - 我的数据在数据库中 - 意味着 - &lt;select id='lorem' value='&lt;?php echo... ?&gt;"'&gt; - 使用选项是不可能的
  • @qadenza 在&lt;select&gt; 中使用value-attribute 时,您到底想达到什么目的?为什么不能使用&lt;option&gt;?或许详细说明您获得了什么样的数据,以及您希望如何将其显示给用户。我开始认为&lt;select&gt; 可能不是您正在寻找的正确标签。
  • 场景非常简单——在注册表单上,用户使用选择标签选择一些值。因此,如果他想更改数据 - 在个人资料页面上 - 我必须提供一个选择标签并设置从数据库中给出的适当值
猜你喜欢
  • 1970-01-01
  • 2020-05-05
  • 2021-10-18
  • 2015-07-14
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
相关资源
最近更新 更多