【问题标题】:Length is returning undefined but value is showing长度返回未定义但值显示
【发布时间】:2014-02-01 14:54:07
【问题描述】:

我有一个函数,我收到一个错误,说“长度”为空,然后我发出警报以查看值和长度,我看到该值返回到循环中,有时它有一个字符串值和有时它有一个数字(例如 SUIT,然后是 8),但由于某种原因,长度显示为未定义? radioobj 变量采用来自表单输入的单选按钮值。

function getRadioValue(radioobj) {
    radiovalue = "";
    for (i=0, n=radioobj.length; i<n; i++) {

        if (radioobj[i].checked) {
            radiovalue = radioobj[i].value;
            break;
        }
    }
    if (!radiovalue) { return 0; }
    else { return radiovalue; }
}

【问题讨论】:

  • 8 是一个数字,因此没有长度方法。
  • 你想完成什么?以及在哪个 var 上未定义长度?
  • 实际上这是我正在研究的现有代码。我看到每个项目的 radioobj.length 似乎都未定义。因此,即使值 (radioobj.value) 是“SUIT”或类似 8 的数字,当我尝试在屏幕上返回输出时,错误消息仍然显示它为 null 或未定义。
  • radioobj 传递了什么?对单个单选按钮的 DOM 引用?
  • 其实。 . .看起来它正在期待一系列单选按钮。 . .就像单个单选组中的所有单选按钮一样。这是传递给它的东西吗?

标签: javascript html radio-button html-input


【解决方案1】:

您可以轻松获取具有相同 ID 的收音机集合。
使用它document.forms['form_id']['radio_id']

<form id="form_id">
    <input type="radio" name="radio_name" id="radio_id" value="Value1" />Value 1
    <input type="radio" name="radio_name" id="radio_id" value="Value2" />Value 2
    <input type="radio" name="radio_name" id="radio_id" value="Value3" />Value 3
</form>

var radio_list = document.forms['form_id']['radio_id'];
alert(radio_list.lengh) // will "3"

【讨论】:

    【解决方案2】:

    代码的编写方式似乎是在寻找一组单选按钮并循环遍历它们以找到被选中的那个。为此,输入 必须 是单选按钮的集合。 . .将单个引用传递给单选按钮将不起作用(并且将为radioobj.length 提供undefined 值)。示例:

    HTML

    <fieldset id="radioVals">
        <input type="radio" name="radioVals" id="val0" value="">Pick an value . . .</input>
        <input type="radio" name="radioVals" id="val1" value="Value1">Value 1</input>
        <input type="radio" name="radioVals" id="val2" value="Value1">Value 2</input>
    </fieldset>
    

    给定这个组,如果你要传递对任何单个单选按钮的引用(例如,使用document.getElementById),你会得到错误,因为该方法返回的是对个人的引用元素。

    var radioOption = document.getElementById("val0");
    window.console.log(radioOption.length);     // will log "undefined"
    

    但是,如果您传入一个单选按钮元素数组(例如,使用.children),您可以使用for 循环,因为该数组会有一个长度。

    var radioOptions = document.getElementById("radioVals").children;
    window.console.log(radioOptions.length);     // will log "3"
    

    根据您的描述,听起来代码使用的是第一种方法,而不是第二种方法。当然有一些方法可以使用单个单选按钮进行此检查,但这不是此代码的设置方式。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2017-07-03
      • 2019-04-02
      • 1970-01-01
      • 2023-04-04
      • 2015-08-16
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多