【问题标题】:Javascript returning 'undefined' if i have less than one element in the form.如果表单中的元素少于一个,则 Javascript 返回“未定义”。
【发布时间】:2011-10-11 11:25:21
【问题描述】:

在下面的例子中:

<html>
<head>
<SCRIPT language="JavaScript">
function checkcheckboxElem(checkboxElem)
{
    alert ("checkboxElem " + checkboxElem.length);  

}
</script>
</head>
<body>
    <form name="checkForm">
        Master: <input type="checkbox" name="master" value="6694" onclick="checkcheckboxElem(document.checkForm.checkboxElem)"><br>

        Child1: <input type="checkbox" name="checkboxElem" value="2">
    </form>                             
</body>

警报输出“未定义”。出于某种原因,如果只有一个复选框,它会这样做。如果我添加另一个复选框,那么它会输出正确的长度。如果我按如下所示更改它,那么它会输出 2

<html>
<head>
<SCRIPT language="JavaScript">
function checkcheckboxElem(checkboxElem)
{
    alert ("checkboxElem " + checkboxElem.length);  

}
</script>
</head>
<body>
    <form name="checkForm">
        Master: <input type="checkbox" name="master" value="6694" onclick="checkcheckboxElem(document.checkForm.checkboxElem)"><br>

        Child1: <input type="checkbox" name="checkboxElem" value="2">
Child2: <input type="checkbox" name="checkboxElem" value="1">
    </form> 

如果只有一个复选框,为什么它会返回“未定义”?

谢谢

【问题讨论】:

    标签: javascript html arrays


    【解决方案1】:

    在第一种情况下,document.checkForm.checkboxElem 指的是单个输入元素,在第二种情况下,它指的是输入元素的数组。你可以这样做:

    function checkcheckboxElem(checkboxElem) {
        if(!checkboxElem.length)
            checkboxElem = [checkboxElem];
        alert ("checkboxElem " + checkboxElem.length);  
    }
    

    【讨论】:

    • 谢谢 - 你是在第 3 行创建一个数组吗?
    • 是的,所以从那里你总是在处理一个数组。不过可能应该重命名变量:) 如果它只是你感兴趣的长度,@ManseUK 建议上面的内容更简洁。
    • 是的,我对长度感兴趣,以便我可以做一些进一步的处理。谢谢。
    【解决方案2】:

    它返回undefined,因为只有一个元素 - javascript 不会将其视为数组,因此它没有长度属性....您可以使用它来确保您始终有一个长度:

    var len = checkboxElem.length;
    if(len == undefined) len = 1;
    

    【讨论】:

      【解决方案3】:

      在第一种情况下,它直接引用复选框元素并且它没有 length 属性。第二种情况,有多个同名元素,所以返回对应元素的数组。

      要获取元素数组,请使用

      document.getElementsByName('checkboxElem');
      

      【讨论】:

        【解决方案4】:

        它返回找到的元素的数量,而不是一个的值..

        输出 2 不是其中一个框的值。它是元素的数量。

        使用类似 checkboxElem.val() 的东西

        【讨论】:

        • 是的,我感兴趣的是长度而不是值。
        • 好的,如果只找到1个元素,它不会返回一个数组,所以.length方法不起作用..
        【解决方案5】:

        因为第一种情况

        document.checkForm.checkboxElem 
        

        是特定元素,但如果有更多同名元素是数组 - 试试这个

        alert ("checkboxElem " + ( typeof( checkboxElm.length ) == 'undefined' ? 1 : checkboxElem.length ));
        

        【讨论】:

          猜你喜欢
          • 2012-05-16
          • 2017-02-06
          • 1970-01-01
          • 2020-12-08
          • 2021-05-24
          • 2018-04-18
          • 2016-11-04
          • 2021-10-13
          • 1970-01-01
          相关资源
          最近更新 更多