长度返回未定义但值显示

时间:2014-01-13 18:17:03

标签: javascript html radio-button html-input

我有一个函数,我得到一个错误,说“长度”为空,然后我做了一个警告,看到值和长度,我看到值回到循环中,有时它有一个字符串值和有时它有一个数字(例如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; }
}

2 个答案:

答案 0 :(得分:0)

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

<强> 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"

根据您的描述,听起来代码使用的是第一种方法,而不是第二种方法。肯定有使用单独的单选按钮进行此检查的方法,但这不是如何设置此代码。

答案 1 :(得分:0)

您可以轻松获取具有相同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"