代码之家  ›  专栏  ›  技术社区  ›  gallium314

我应该使用什么HTML语义来访问自定义计算器的输出?

  •  0
  • gallium314  · 技术社区  · 1 年前

    我正在开发一个简单的计算器工具。现在,我正在使用 <input> 的元素 readonly 属性以设置计算结果的样式。然而,尽管我认为这会产生令人满意的美学效果,但我担心这是一个糟糕的可访问性选择,因为这不是输入,而是输出。不同的HTML元素在这里更合适吗?

    以下是我尝试做的一个小复制:

    <h1>Triangle Area Calculator</h1>
    <form>
        <ul>
            <li>
                <label for="base">Triangle base:</label>
                <input type="number" step="any" id="base" name="base" required onchange="checkComplete()">
            </li>
            <li>
                <label for="height">Triangle height:</label>
                <input type="number" step="any" id="height" name="height" required onchange="checkComplete()">
            </li>
            <li>
                <label for="area">Triangle area:</label>
                <input type="number" step="any" class="result" id="area" name="result" readonly>
            </li>
        </ul>
    </form>
    
    form ul {
      list-style: none;
    }
    input.result{
      background-color: whitesmoke;
    }
    
    function checkComplete() {
        base_input = document.getElementById("base")
      height_input = document.getElementById("height")
      area_result = document.getElementById("area")
      
      if (base_input.checkValidity() && height_input.checkValidity()){
        area_result.value = base_input.value * height_input.value/2
      }
      else{
        area_result.value = ""
      }
    }
    

    这是上面的一个 JSFiddle project.

    1 回复  |  直到 1 年前
        1
  •  1
  •   Ry-    1 年前

    <output> : The Output element ,即

    容器元素,站点或应用程序可以将计算结果或用户操作的结果注入其中。

    "use strict";
    
    function checkComplete() {
      let base_input = document.getElementById("base");
      let height_input = document.getElementById("height");
      let area_result = document.getElementById("area");
    
      if (base_input.checkValidity() && height_input.checkValidity()) {
        area_result.value = base_input.value * height_input.value / 2;
      } else {
        area_result.value = "";
      }
    }
    form ul {
      list-style: none;
    }
    
    input.result {
      background-color: whitesmoke;
    }
    <h1>Triangle Area Calculator</h1>
    <form>
      <ul>
        <li>
          <label for="base">Triangle base:</label>
          <input type="number" step="any" id="base" name="base" required onchange="checkComplete()">
        </li>
        <li>
          <label for="height">Triangle height:</label>
          <input type="number" step="any" id="height" name="height" required onchange="checkComplete()">
        </li>
        <li>
          <label for="area">Triangle area:</label>
          <output for="base height" class="result" id="area" name="result"></output>
        </li>
      </ul>
    </form>