是否有 JavaScript 函数确定检查哪个无线电输入并使用该无线电输入的值发出警报?

Is there a JavaScript function that determines which radio input is checked and alerts with the value of that radio input?

理论上,我可以使用 for 循环遍历各种无线电输入以查看选中了哪些无线电输入,然后提醒选中的无线电输入的值,但该功能仅在选择第一个无线电输入时有效。

我最后的 objective 是为客户构建报价表,但我在第一个障碍上跌跌撞撞。 'alert' 的使用是唯一看到任何结果的尝试(我尝试了 console.log、console.dir 等,我已经使用 chrome [=29= 工作了几个小时] 无济于事。如果我有一个带默认检查的收音机 (checked="checked") 它也会失败,除非它是我选择的第一个收音机输入)。甚至下面的 JS 也是我在 Whosebug 上发现的一个(不是重复的)问题的刮痕,OP 声称它有效。

const radioButtonValue = radioName => {
      var radioButtons = document.getElementsByName(radioName);
      for (var i = 0; i < radioButtons.length; i++) {
        if (radioButtons[i].checked) {
          return radioButtons[i].value;
        } else {
          return "no value";
        }
      }
    };

    const getValues = () => {
      var distance = radioButtonValue("distanceInput");
      alert(distance);
    };
<form>
      <input name="distanceInput" type="radio" value="d1" />0-9km
      <input name="distanceInput" type="radio" value="d2" />10-19km
      <input name="distanceInput" type="radio" value="d3" />20-29km
      <input name="distanceInput" type="radio" value="d4" />30-39km
      <input name="distanceInput" type="radio" value="d5" />40-49km
      <input name="distanceInput" type="radio" value="d6" />50-59km
      <input name="distanceInput" type="radio" value="d7" />60-69km
      <input name="distanceInput" type="radio" value="d8" />70-79km
      <input name="distanceInput" type="radio" value="d9" />80-89km
    </form>
   <button onclick="getValues()">Get</button>

当我点击第一个单选输入并调用 getValues() 时;我收到值 "d1" 的提醒,但当我单击任何其他值时,我看到 "no value"。

您的函数 returns 在第一次检查后,请改用此格式:

const radioButtonValue = radioName => {
      var radioButtons = document.getElementsByName(radioName);
      var output="no value"
      for (var i = 0; i < radioButtons.length; i++) {
        if (radioButtons[i].checked) {
          output=radioButtons[i].value;
          break
          }
      }
      return output
    };
    

    const getValues = () => {
      var distance = radioButtonValue("distanceInput");
      alert(distance);
    };
<form>
      <input name="distanceInput" type="radio" value="d1" />0-9km
      <input name="distanceInput" type="radio" value="d2" />10-19km
      <input name="distanceInput" type="radio" value="d3" />20-29km
      <input name="distanceInput" type="radio" value="d4" />30-39km
      <input name="distanceInput" type="radio" value="d5" />40-49km
      <input name="distanceInput" type="radio" value="d6" />50-59km
      <input name="distanceInput" type="radio" value="d7" />60-69km
      <input name="distanceInput" type="radio" value="d8" />70-79km
      <input name="distanceInput" type="radio" value="d9" />80-89km
    </form>
   <button onclick="getValues()">Get</button>

或者没有循环:

const radioButtonValue = radioName => {
      var radioButton = document.querySelector("input[name="+radioName+"]:checked");
      return radioButton?radioButton.value:"no value"
    };
    

    const getValues = () => {
      var distance = radioButtonValue("distanceInput");
      alert(distance);
    };
<form>
      <input name="distanceInput" type="radio" value="d1" />0-9km
      <input name="distanceInput" type="radio" value="d2" />10-19km
      <input name="distanceInput" type="radio" value="d3" />20-29km
      <input name="distanceInput" type="radio" value="d4" />30-39km
      <input name="distanceInput" type="radio" value="d5" />40-49km
      <input name="distanceInput" type="radio" value="d6" />50-59km
      <input name="distanceInput" type="radio" value="d7" />60-69km
      <input name="distanceInput" type="radio" value="d8" />70-79km
      <input name="distanceInput" type="radio" value="d9" />80-89km
    </form>
   <button onclick="getValues()">Get</button>

这个比这个简单多了。不需要循环或 if/then。只需使用 .querySelector() 来隔离选中的单选按钮。

document.querySelector("button").addEventListener("click", function(){
  // Get the checked radio button
  let selected = document.querySelector("form input[name='distanceInput']:checked");

  console.log(selected.value);
});
<form>
  <input name="distanceInput" type="radio" value="d1" />0-9km
  <input name="distanceInput" type="radio" value="d2" />10-19km
  <input name="distanceInput" type="radio" value="d3" />20-29km
  <input name="distanceInput" type="radio" value="d4" />30-39km
  <input name="distanceInput" type="radio" value="d5" />40-49km
  <input name="distanceInput" type="radio" value="d6" />50-59km
  <input name="distanceInput" type="radio" value="d7" />60-69km
  <input name="distanceInput" type="radio" value="d8" />70-79km
  <input name="distanceInput" type="radio" value="d9" />80-89km

<button type="button">Get selected radio button value</button>
</form>

是的,有这样的功能。当您访问 elements collection of the form element, for radiobuttons you get back a special RadioNodeList that has a value property.

上的名称时

你的情况:

document.querySelector("form").elements["distanceInput"].value;

一个简单的方法是给你的单选按钮一个 class 并使用下面的查询选择器 .<className>:checked

例子

document.getElementById('btn').onclick = (e) => {
  const val = document.querySelector('.radio:checked').value;
  console.log(val);
};
<form>
  <input type="radio" name="test" class="radio" value="One" />
  <input type="radio" name="test" class="radio" value="Two" />
  <input type="radio" name="test" class="radio" value="Three" />
</form>
<button id="btn">Get Value</button>